|
|
|
| Надеюсь кто-нибудь ответит на такой кажется простой вопрос :)
Есть у меня допустим простая выборка из таблицы messages с сортировкой по времени
SELECT * FROM messages ORDER BY mdate LIMIT 10
|
А теперь слегка усложняем задачу. Нужно получить последние по дате 10 записей из этой таблицы, отсортированные по дате. Казалось бы любой нормальный язык скажет
SELECT * FROM messages ORDER BY mdate LIMIT -10
|
но нет. MySQL ругается на отрицательный лимит. Как обойти это ограничение? | |
|
|
|
|
|
|
|
для: 1999
(11.08.2008 в 17:41)
| | Кто Вам такое напел про "любой нормальный язык" ?
У любого языка есть правила.
Согласно соответствующим правилам MySQL LIMIT -10 - явная ошибка.
Самый простой способ (как минимум при десяти не запредельного размера элементах) - загнать их в массив и взять оттуда на уровне php в обратном порядке. | |
|
|
|
|
|
|
|
для: 1999
(11.08.2008 в 17:41)
| |
SELECT * FROM messages ORDER BY mdate DESC LIMIT 10
|
| |
|
|
|
|
|
|
|
для: 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;
|
| |
|
|
|
|
|
|
|
для: BinLaden
(11.08.2008 в 18:07)
| | 2Trianon: я думаю вы как один из самыхз старых членов этого форума должны быть в курсе про Пайтон, Руби и другие новомодные языки программирования. По мне так очень логично бы было, чтобы -10 выводило последние 10 записей. Насчет вашего ответа: в таблице около 15000 записей и их количество быстро растет. Вряд ли я смогу получать их все и слайсить массив с помощью пхп
2Proger: этот запрос сортирует эти 10 сообщений в обратном порядке. А мне необходимо, чтобы сортировка происходила по дате от самыхз старых к самым новым.
2BliLaden: мм.... это какое-то извращение...... неужели все так плохо?( | |
|
|
|
|
|
|
|
для: 1999
(11.08.2008 в 18:18)
| | 2Trianon: сори, неправильно понял ваше сообщение. Да, пожалуй это и есть пока решение. Но неужели мускул настолько слаб в плане сортировок и лимитов?( | |
|
|
|
|
|
|
|
для: 1999
(11.08.2008 в 18:19)
| | Он силен хотя бы тем, что у него есть LIMIT.
Вот в ORACLE LIMIT вообще нет. Там чистый эквивалент LIMIT - SELECT тройной вложенности.
Собственно это не недостаток, там другая парадигма работы с данными - выборка данных выполняется через курсоры (и последние берут всю тяжесть страничного разбиения) | |
|
|
|
|
|
|
|
для: 1999
(11.08.2008 в 18:18)
| | >Насчет вашего ответа: в таблице около 15000 записей и их количество быстро растет. Вряд ли я смогу получать их все и слайсить массив с помощью пхп
Зачем же все? Забирайте десяток в обратном порядке. С ним и работайте. | |
|
|
|
|
|
|
|
для: BinLaden
(11.08.2008 в 18:07)
| | >Если Ваша MySQL-версия поддерживает LIMIT в подзапросе...
А разве есть хоть одна, которая допускает такой фортель? | |
|
|
|
|
|
|
|
для: 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'" | |
|
|
|