Заказ извлеченной информации из базы данных - PullRequest
0 голосов
/ 25 июля 2011

Я создаю фид, получая информацию из моей базы данных, используя вложенные циклы while (есть ли лучший способ сделать это?).

У меня есть одна таблица, называемая пользователями со всеми именами среди прочего. Другая таблица называется сообщениями, в которых есть сообщения, пользователь, который ее опубликовал, и отметка времени.

$userQuery = mysql_query("SELECT name FROM users");
while ($user = mysql_fetch_array($userQuery, MYSQL_NUM)) {
    $messageQuery = mysql_query("SELECT message FROM messages WHERE user = $user ORDER BY timestamp DESC");
    while ($message = mysql_fetch_array($messageQuery, MYSQL_NUM)) {
        echo "$user[0]: $message[0]";
    }
}

Проблема в том, что он не упорядочен по отметке времени, и я не могу сказать, как он упорядочен. Я пробовал метки времени, даты и типа int с отметками времени UNIX.

РЕДАКТИРОВАТЬ: я должен добавить, что пользователь и сообщение совпадают, просто порядок не работает.

Ответы [ 2 ]

0 голосов
/ 25 июля 2011

Для запроса вы можете создать соединение

SELECT u.name as name, m.message as message
FROM users u inner join messages m
on u.user = m.user
order by 
m.timestamp DESC

Что касается второй части, я не вижу ничего плохого в вашей возможности.Может быть, вы могли бы опубликовать некоторые образцы ваших данных, чтобы увидеть, если это имеет какое-либо значение.

0 голосов
/ 25 июля 2011

Я полагаю, вы получаете своих пользователей в более или менее случайном порядке, и "в пределах" одного пользователя сортировка в порядке?!

использование:

$result = mysql_query('select users.name,messages.message from messages join users on (users.name=messages.user) order by messages.timestamp');
while($row = mysql_fetch_row($result))
    echo "$row[0]: $row[1]";

Это должно дать вам заказанныйрезультат (по крайней мере, если у вас есть столбец с именем messages.timestamp. Проверьте имя ;-)).И все в одном запросе ...

...