2009-10-26 13 views
1

이 쿼리에서 표시 할 정보를 얻는 데 문제가 있습니다. 누구 내가 잘못 가고 있는지 알아?PHP 쿼리 다중 테이블

감사합니다.

$query = "SELECT * ". 
      "FROM comments, users ". 
      "WHERE comments.user_id = users.user_id ". 
      "ORDER BY comments.date DESC ". 
      "LIMIT 10"; 

$result = mysql_query($query) or die(mysql_error()); 

    while ($row = mysql_fetch_array($result)) { 


    echo $row['users.user_id']; 
    echo $row['comments.comment']; 


} 
+2

턴 error_reporting은 당신은 당신의 문제를 볼 수 있습니다 :이 수정 후 당신의주기가로 변환. –

답변

2

쿼리에 존재하지 않는 필드에 정렬 (ORDER BY) 때문에 오류가 발생했을 수 있습니다.

"SELECT *"쿼리를 사용하지 않는 것이 좋습니다. 필요한 값이 모두 필요한 경우이를 지정하십시오. 데이터 ...

$query = "SELECT users.user_id, comments.comment, comments.date ". 
         "FROM comments, users ". 
         "WHERE comments.user_id = users.user_id ". 
         "ORDER BY comments.date DESC ". 
         "LIMIT 10"; 

$result = mysql_query($query) or die(mysql_error()); 

    while ($row = mysql_fetch_array($result)) { 


    echo $row['user_id']; 
    echo $row['comment']; 
    echo $row['date']; 


} 
4

mysql_fetch_array() 대신 mysql_fetch_assoc()을 사용하십시오. 루프에서 배열 키로 열 이름을 사용 : 조회에서

while ($row = mysql_fetch_assoc($result)) { 

    echo $row['column_name1']; 
    echo $row['column_name1']; 

} 

가 선택 문에 대한 자세한 구체적으로하려고, * 사용하지보십시오.

0

그것은 쿼리에서 열 이름을 지정하는 대신 * 사용하는 것이 좋습니다 인을 검색 할 때이 또한 도움이 - 일부 데시벨에 성능에 미치는 영향이 모두에 어떤 예기치 않은 동작 자르기를 방지 테이블 변경에서부터.

echo $row['user_id']; 
    echo $row['comment']; 
0

더 좋은 연습입니다 : 당신이 그들에있는 테이블 이름, 그냥 열 이름을 포함 할 필요가 없습니다 - 예에서

나는 문제가 사용하는 배열의 키에서 arsing 생각 만 작성하면 다음과 같이 사용자의 SQL 쿼리에 필요한 필드 :

$query = "SELECT u.user_id uid, c.comment comment ". 
        "FROM comments c, users u ". 
        "WHERE comments.user_id = users.user_id ". 
        "ORDER BY comments.date DESC ". 
        "LIMIT 10"; 

그래서 당신은 당신의 쿼리를 실행하고 PHP 스크립트로 데이터베이스 서버에서 데이터를 전송하는 시간을 줄일 쿼리의 유형을 사용. E_ALL 및 On으로 display_errors를 (만 dev에 상자)에

while ($row = mysql_fetch_array($result)) { 
echo $row['uid'], $row['comment']; 

}