2009-10-26 2 views
1

У меня возникли проблемы с получением любой информации для отображения из этого запроса. Кто-нибудь знает, где я ошибаюсь?PHP query multiple Tables

Спасибо!

$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

Turn error_reporting в E_ALL и display_errors в On (что только на Dev поле), и вы увидите вашу проблему. –

ответ

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_assoc() вместо mysql_fetch_array(). в цикле использовать имя столбца в качестве ключа массива:

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

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

} 

В запросе попытаться быть более точным на оператора выбора, старайтесь не использовать *.

0

Это хорошая практика, чтобы указать имена столбцов в запросе, а не использовать * - на некоторой БД есть влияние на производительность и на всем это предотвращает любое неожиданное поведение кадрирования от изменений таблицы.

В примере я думаю, что вопрос arsing из массива ключей, которые вы используете - вы не должны включать имя таблицы в них, только имя столбца:

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

Лучше практика писать только поля, что вам нужно в вашем 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"; 

Использования так типа запросов вы уменьшаете время выполнения запроса и передач данных от сервера базы данных на ваш скрипт. После этой модификации ваш цикл превращается в:

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

}