Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Последние строки таблицы в обратном порядке
 
 автор: Caman   (07.04.2007 в 09:45)   письмо автору
 
 

Доброго времени суток! Нужна ваша помощь! Я сам новичёк, учусь не по мануалам (трудно), а на примерах и подсказках... методом проб и ошибок...
Никак не могу сделать так, чтобы последнии выведенные строки из таблицы, были в обратном порядке. Нашёл пару тем, но не смог разобраться. Вот мой пример. Это чат...

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>";
        }


Как теперь это реализовать, какую строку добавить?
Буд очень благодарен. Заранее спасибо!

   
 
 автор: cheops   (07.04.2007 в 12:36)   письмо автору
 
   для: Caman   (07.04.2007 в 09:45)
 

Вообще говоря, конструкция ORDER BY id DESC должна давать обратный порядок... В каком порядке у вас сейчас выводятся сообщения?

   
 
 автор: Caman   (07.04.2007 в 12:39)   письмо автору
 
   для: cheops   (07.04.2007 в 12:36)
 

Выводятся 99,98,97,96... а нужно 96,97,98,99
Это как вчате... последнее сообщение внизу.

   
 
 автор: NovikovMA   (07.04.2007 в 12:54)   письмо автору
 
   для: Caman   (07.04.2007 в 12:39)
 

SELECT * FROM chat LIMIT 96, 4
может быть так?

   
 
 автор: Caman   (07.04.2007 в 13:05)   письмо автору
 
   для: NovikovMA   (07.04.2007 в 12:54)
 

не, не так... это же чат... там может быть и 5000 сообщений... а с цифрами я примерно показал... что у меня последнии сообщения вверху, а не внизу... когда desc убираю, тогда только первые 50 сообщений показывает, а когда добавляю, то последнии 50... но, как уже говорил, самое последнее сообщение вверху, а нужно чтобы внизу было.

   
 
 автор: cheops   (07.04.2007 в 14:07)   письмо автору
 
   для: Caman   (07.04.2007 в 13:05)
 

Придётся вычислять количество сообщений в таблице и использовать два параметра в конструкции LIMIT.

   
 
 автор: Caman   (07.04.2007 в 14:17)   письмо автору
 
   для: cheops   (07.04.2007 в 14:07)
 

может есть вариант как-нибудь перевернуть их, при отображении? как вообще в чатах это делается... непонимаю...

   
 
 автор: cheops   (07.04.2007 в 16:31)   письмо автору
 
   для: Caman   (07.04.2007 в 14:17)
 

Делается в два запроса - подсчитывается количество сообщений используется запрос вида
"SELCT * FROM tbl ORDER BY id LIMIT ".($total - 50).", 50";

Можно использовать ваш запрос, только не выводить данные сразу, а помещать в массив, который затем сортировать PHP-средствами.

   
 
 автор: Trianon   (07.04.2007 в 19:45)   письмо автору
 
   для: Caman   (07.04.2007 в 14:17)
 

Если результат запроса буферизирован (а обычно он именно таким и является), можно применить функцию mysql_data_seek для перемещения по набору результата в обратную сторону.

   
 
 автор: Caman   (08.04.2007 в 18:39)   письмо автору
 
   для: Trianon   (07.04.2007 в 19:45)
 

если честно, то я только начинаю изучать функции и масивы... не могли бы вы мне на примере моего кода показать... как и что... а то я не понимаю, откуда переменная $total взялась?

   
 
 автор: Trianon   (08.04.2007 в 19:28)   письмо автору
 
   для: 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>"


Но такой подход требует больше памяти для обработки.

   
 
 автор: Caman   (08.04.2007 в 20:04)   письмо автору
 
   для: Trianon   (08.04.2007 в 19:28)
 

Спасибо, действительно, первый вариант заработал... тока сначала не заработал... ошибочка маленькая в переменной rows... но это просто грамматика =) а так огромное вам спасибо, надеюсь это поможет не только мне!

   
 
 автор: Caman   (08.04.2007 в 20:20)   письмо автору
 
   для: Caman   (08.04.2007 в 20:04)
 

Хочу вот что узнать.
Много видет тем про ajax. Как нибудь можно применить в этом коде, чтобы обновлялся чат без перезагрузки самой страницы, ну или когда новое сообщение в БД попадает?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования