|
|
|
| Доброго времени суток! Нужна ваша помощь! Я сам новичёк, учусь не по мануалам (трудно), а на примерах и подсказках... методом проб и ошибок...
Никак не могу сделать так, чтобы последнии выведенные строки из таблицы, были в обратном порядке. Нашёл пару тем, но не смог разобраться. Вот мой пример. Это чат...
include("connect.php");
$result = mysql_query("SELECT * FROM chat ORDER BY id desc LIMIT 50");
$rows = mysql_num_rows($result);
if ($rows > 0) {
while($row = mysql_fetch_array($result)){
$time = date("d. F Y H:i",$row[time]);
echo "[$row[posttime]] <b title='$time'>$row[author]</b>: ";
echo "$row[babble]";
echo "<br>";
}
|
Как теперь это реализовать, какую строку добавить?
Буд очень благодарен. Заранее спасибо! | |
|
|
|
|
|
|
|
для: Caman
(07.04.2007 в 09:45)
| | Вообще говоря, конструкция ORDER BY id DESC должна давать обратный порядок... В каком порядке у вас сейчас выводятся сообщения? | |
|
|
|
|
|
|
|
для: cheops
(07.04.2007 в 12:36)
| | Выводятся 99,98,97,96... а нужно 96,97,98,99
Это как вчате... последнее сообщение внизу. | |
|
|
|
|
|
|
|
для: Caman
(07.04.2007 в 12:39)
| | SELECT * FROM chat LIMIT 96, 4
может быть так? | |
|
|
|
|
|
|
|
для: NovikovMA
(07.04.2007 в 12:54)
| | не, не так... это же чат... там может быть и 5000 сообщений... а с цифрами я примерно показал... что у меня последнии сообщения вверху, а не внизу... когда desc убираю, тогда только первые 50 сообщений показывает, а когда добавляю, то последнии 50... но, как уже говорил, самое последнее сообщение вверху, а нужно чтобы внизу было. | |
|
|
|
|
|
|
|
для: Caman
(07.04.2007 в 13:05)
| | Придётся вычислять количество сообщений в таблице и использовать два параметра в конструкции LIMIT. | |
|
|
|
|
|
|
|
для: cheops
(07.04.2007 в 14:07)
| | может есть вариант как-нибудь перевернуть их, при отображении? как вообще в чатах это делается... непонимаю... | |
|
|
|
|
|
|
|
для: Caman
(07.04.2007 в 14:17)
| | Делается в два запроса - подсчитывается количество сообщений используется запрос вида
"SELCT * FROM tbl ORDER BY id LIMIT ".($total - 50).", 50";
|
Можно использовать ваш запрос, только не выводить данные сразу, а помещать в массив, который затем сортировать PHP-средствами. | |
|
|
|
|
|
|
|
для: Caman
(07.04.2007 в 14:17)
| | Если результат запроса буферизирован (а обычно он именно таким и является), можно применить функцию mysql_data_seek для перемещения по набору результата в обратную сторону. | |
|
|
|
|
|
|
|
для: Trianon
(07.04.2007 в 19:45)
| | если честно, то я только начинаю изучать функции и масивы... не могли бы вы мне на примере моего кода показать... как и что... а то я не понимаю, откуда переменная $total взялась? | |
|
|
|
|
|
|
|
для: Caman
(08.04.2007 в 18:39)
| | про $total не скажу. В Вашем коде его не было.
Я же имел в виду следующее:
<?
$result = mysql_query("SELECT * FROM chat ORDER BY id desc LIMIT 50");
$rows = mysql_num_rows($result);
while( --$rows >= 0)
{
mysql_data_seek($result, $roes);
$row = mysql_fetch_assoc($result);
$time = date("d. F Y H:i",$row[time]);
echo "[$row[posttime]] <b title='$time'>$row[author]</b>: ";
echo "$row[babble]";
echo "<br>";
}
|
Аналогичный результат можно достичь проще, забрав весь результат запроса в массив:
<?
$result = mysql_query("SELECT * FROM chat ORDER BY id desc LIMIT 50");
$rows = array();
while($row = mysql_fetch_assoc($result))
$rows[] = $row;
array_reverse($rows);
foreach($rows as $row)
{
$time = date("d. F Y H:i",$row[time]);
echo "[$row[posttime]] <b title='$time'>$row[author]</b>: ";
echo "$row[babble]";
echo "<br>";
}
|
Но такой подход требует больше памяти для обработки. | |
|
|
|
|
|
|
|
для: Trianon
(08.04.2007 в 19:28)
| | Спасибо, действительно, первый вариант заработал... тока сначала не заработал... ошибочка маленькая в переменной rows... но это просто грамматика =) а так огромное вам спасибо, надеюсь это поможет не только мне! | |
|
|
|
|
|
|
|
для: Caman
(08.04.2007 в 20:04)
| | Хочу вот что узнать.
Много видет тем про ajax. Как нибудь можно применить в этом коде, чтобы обновлялся чат без перезагрузки самой страницы, ну или когда новое сообщение в БД попадает? | |
|
|
|