Забыли пароль?
Запросите новый здесь.

Автор темы: mishqa35
ID темы: 1169
Информация:
Тема содержит 11 сообщения, была просмотрена 1942 раз.  Имеются прикрепленные файлы.
Просмотр темы
PHP-Fusion Russia » Веб-разработка » MySQL
 Распечатать тему
Интересный mysql запрос
mishqa35
Скачать исходники  Код
$numrows = dbcount("(id)", DB_CHAT);
$result = dbquery(
   "SELECT ch.id, ch.date, ch.user_id, ch.text,
         tu.user_id, tu.user_name, tu.user_avatar, tu.user_level, tu.user_lastvisit, tu.user_status FROM ".DB_CHAT." ch
   LEFT JOIN ".DB_USERS." tu ON ch.user_id=tu.user_id
   ORDER BY ch.date ASC LIMIT 0,25");
if (dbrows($result)) {
   $i = 0;
   while ($data = dbarray($result)) {
      echo $data['user_name'].": ".$data['text'];
      $i++;
      if ($i != $numrows) { echo "<br />\n"; }
   }
} else {
   echo "<div>Сообщений нет.</div>\n";
}




выводит то что нужно, Но когда я делаю вывод в div со скролингом в низ то выводит не то что надо, как будто обрезает что то

div имеет вот такой вид <div class='mess_list'>".$текст из базы."</div>
Скачать исходники  Код
.mess_list {
   max-height: 225px;
   overflow: auto;
}




вывожу то что надо не хорошими методами, тоесть
Скачать исходники  Код
после
$numrows = dbcount("(id)", DB_CHAT);
доабавляю
$row = $numrows-25;
и
LIMIT 0,25");
меняю на
LIMIT ".$row.",".$numrows);



И получается нормальный вывод, последнее сообщение снизу, несмотря на их количество в базе (больше 25+)

Но это варварски как то, мб кто нить сталкивался с подобным ... *sply*
 
Web
Rush
LIMIT ".$row.",".$numrows); - вот ты понял что здесь написал?
первое число - это стартовая позиция, а второе - количество выбираемых записей.
допустим у тя 100 записей в базе, таким запросом ты пытаешься выбрать 100 записей начиная с 75 позиции, хотя у тя всего 100. короче бред закрался в твоем коде.
а в первом запросе ничего странного не увидел. и суть проблемы не понял
 
Web
mishqa35
Cуть проблемы в том что он не выводит то что мне надо, имеется таблица chat в ней поля id, date, text мне нужно вывести последние 25 сообщений, чтобы последнее сообщение было с низу страницы
Вот такой запрос выводит последние 25 сообщений, новое находится с верху
Скачать исходники  Код
$result = dbquery(
   "SELECT ch.id, ch.date, ch.user_id, ch.text,
         tu.user_id, tu.user_name, tu.user_avatar, tu.user_level, tu.user_lastvisit, tu.user_status FROM ".DB_CHAT." ch
   LEFT JOIN ".DB_USERS." tu ON ch.user_id=tu.user_id
   ORDER BY ch.id DESC LIMIT 0,25");


Если же меняю DESC на ASC он выводит с первого по 25, и 25 сообщение с низу, и если в базе допустим 30 записей то он все равно выведет последним это самое 25 сообщение. Тут же без цикла не обойтись?
Наподобии такого
Скачать исходники  Код
$result = dbquery("SELECT ch.id, ch.date, ch.user_id, ch.text,
         tu.user_id, tu.user_name, tu.user_avatar, tu.user_level, tu.user_lastvisit, tu.user_status FROM ".DB_CHAT." ch
   LEFT JOIN ".DB_USERS." tu ON ch.user_id=tu.user_id
   ORDER BY ch.date DESC LIMIT 25");
$rows = array();
while($rows[] = dbarray ($result));
for($i = count($rows) - 2; $i >= 0 ; $i--) {
   echo "[".showdate("%d/%m/%Y %H:%M", $rows[$i]['date'])."] ".$rows[$i]['user_name'].": ".$rows[$i]['text']."<br />";
}


Вот думаю правильно ли такое решение

Оффтопик Суть этого LIMIT ".$row.",".$numrows); было вывести число из базы начиная с Х и заканчивая Y

 
Web
Rush
Если же меняю DESC на ASC он выводит с первого по 25, и 25 сообщение с низу, и если в базе допустим 30 записей то он все равно выведет последним это самое 25 сообщение.

а что оно по твоему должно вывести? ASC LIMIT 25 само собой выведет по возрастанию первые 25 записей. составляй правильно запрос. mysql в данном случае работает так, как должен
 
Web
mishqa35
Как бы я в курсе что надо составить запрос, или что то подобное, но если бы знал как правильно, писал бы я тут? Раздел же вроде как для вопросов и ответов. Как ни странно, тут уже не первый раз отправляют в поиск. be
 
Web
Polarfox
Сформулируй что тебе нада, кажется я помню такое но чото с головой не дружу (буйный да).
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле.
Ежели кто забанен за спам, но не считает себя ботом: можете сообщить мне об этом, все будет хорошо.

PolarLab - вход для подопытных
 
Web
mishqa35
Повторюсь еще раз, есть таблица chat в ней поля id, date, text.
Мне нужно выводить последние X (25) сообщений, но чтобы новые были с низу а старые с верху. На скрине показано что надо
mishqa35 присоединено следующее:изображение:
8743862384691.gif

 
Web
mishqa35
:closed: решал так LIMIT х, y
 
Web
Polarfox
Загрузить источник  GeSHi: MySQL
  1. SELECT * FROM `pref_news` WHERE 1
  2. order by news_id
  3. LIMIT 15,10
Добавлено за 0.009 секунд, используя GeSHi 1.0.8.10

это то что ты хочешь? Только у меня чатика нет тренируюсь на новостяшках.

странно что зафигачил тему хотя сам решил...
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле.
Ежели кто забанен за спам, но не считает себя ботом: можете сообщить мне об этом, все будет хорошо.

PolarLab - вход для подопытных
 
Web
mishqa35
Да думал есть попроще решение, у меня просто много других переменных еще. Но проблема решена, всем спасибо за внимание
 
Web
Polarfox
Есть вероятно, но где другие нагрузки - там другие бд, и другие поля и другие запросы и все другое.

С другой стороны, выборка конечно будет идти по всем срокам и отбираться будут нужные... Но это весь лимит такой.
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле.
Ежели кто забанен за спам, но не считает себя ботом: можете сообщить мне об этом, все будет хорошо.

PolarLab - вход для подопытных
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Топ 5 пользователей форума
Alex Alex (1,166)   Zaxap Zaxap (1,078)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)