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

Форум MySQL

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

 

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

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

тема: Отрицательный limit / Negative limit
 
 автор: 1999   (11.08.2008 в 17:41)   письмо автору
 
 

Надеюсь кто-нибудь ответит на такой кажется простой вопрос :)
Есть у меня допустим простая выборка из таблицы messages с сортировкой по времени


SELECT * FROM messages ORDER BY mdate LIMIT 10


А теперь слегка усложняем задачу. Нужно получить последние по дате 10 записей из этой таблицы, отсортированные по дате. Казалось бы любой нормальный язык скажет


SELECT * FROM messages ORDER BY mdate LIMIT -10


но нет. MySQL ругается на отрицательный лимит. Как обойти это ограничение?

  Ответить  
 
 автор: Trianon   (11.08.2008 в 17:53)   письмо автору
 
   для: 1999   (11.08.2008 в 17:41)
 

Кто Вам такое напел про "любой нормальный язык" ?
У любого языка есть правила.
Согласно соответствующим правилам MySQL LIMIT -10 - явная ошибка.


Самый простой способ (как минимум при десяти не запредельного размера элементах) - загнать их в массив и взять оттуда на уровне php в обратном порядке.

  Ответить  
 
 автор: Proger   (11.08.2008 в 18:03)   письмо автору
 
   для: 1999   (11.08.2008 в 17:41)
 

SELECT * FROM messages ORDER BY mdate DESC LIMIT 10

  Ответить  
 
 автор: BinLaden   (11.08.2008 в 18:07)   письмо автору
 
   для: 1999   (11.08.2008 в 17:41)
 

Если Ваша MySQL-версия поддерживает LIMIT в подзапросе, то как-то так:

SELECT * FROM ( SELECT * FROM `messages` ORDER BY `mdate` DESC LIMIT 10 ) AS `t` ORDER BY `mdate` ASC LIMIT 10;

  Ответить  
 
 автор: 1999   (11.08.2008 в 18:18)   письмо автору
 
   для: BinLaden   (11.08.2008 в 18:07)
 

2Trianon: я думаю вы как один из самыхз старых членов этого форума должны быть в курсе про Пайтон, Руби и другие новомодные языки программирования. По мне так очень логично бы было, чтобы -10 выводило последние 10 записей. Насчет вашего ответа: в таблице около 15000 записей и их количество быстро растет. Вряд ли я смогу получать их все и слайсить массив с помощью пхп

2Proger: этот запрос сортирует эти 10 сообщений в обратном порядке. А мне необходимо, чтобы сортировка происходила по дате от самыхз старых к самым новым.

2BliLaden: мм.... это какое-то извращение...... неужели все так плохо?(

  Ответить  
 
 автор: 1999   (11.08.2008 в 18:19)   письмо автору
 
   для: 1999   (11.08.2008 в 18:18)
 

2Trianon: сори, неправильно понял ваше сообщение. Да, пожалуй это и есть пока решение. Но неужели мускул настолько слаб в плане сортировок и лимитов?(

  Ответить  
 
 автор: Trianon   (11.08.2008 в 18:32)   письмо автору
 
   для: 1999   (11.08.2008 в 18:19)
 

Он силен хотя бы тем, что у него есть LIMIT.
Вот в ORACLE LIMIT вообще нет. Там чистый эквивалент LIMIT - SELECT тройной вложенности.
Собственно это не недостаток, там другая парадигма работы с данными - выборка данных выполняется через курсоры (и последние берут всю тяжесть страничного разбиения)

  Ответить  
 
 автор: Trianon   (11.08.2008 в 18:21)   письмо автору
 
   для: 1999   (11.08.2008 в 18:18)
 

>Насчет вашего ответа: в таблице около 15000 записей и их количество быстро растет. Вряд ли я смогу получать их все и слайсить массив с помощью пхп

Зачем же все? Забирайте десяток в обратном порядке. С ним и работайте.

  Ответить  
 
 автор: Trianon   (11.08.2008 в 18:23)   письмо автору
 
   для: BinLaden   (11.08.2008 в 18:07)
 

>Если Ваша MySQL-версия поддерживает LIMIT в подзапросе...

А разве есть хоть одна, которая допускает такой фортель?

  Ответить  
 
 автор: BinLaden   (11.08.2008 в 18:29)   письмо автору
 
   для: Trianon   (11.08.2008 в 18:23)
 

Ага, извиняюсь.

Зато ошибочка такая есть :))

ERROR 1235 (ER_NOT_SUPPORTED_YET)
SQLSTATE = 42000
Message = "This version of MySQL does not yet support
'LIMIT & IN/ALL/ANY/SOME subquery'"

  Ответить  
Rambler's Top100
вверх

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