[MySQL] Порядок сортировки и LIMIT
хочешь приколоться как Шаллер? 

Хочу узнать, сможет ли Шаллер с минимальными затратами крови перевернуть треды.
если xxx это дата, то можно так
ORDER BY '2015-01-01' - xxx ASC LIMIT 10
ORDER BY '2015-01-01' - xxx ASC LIMIT 10
xxx - это порядок сортировки, там может быть всё, что угодно. Меня интересует, как сделать это в общем случае, то есть, как свернуть в один одноуровневый селект
SELECT * FROM (SELECT myfields FROM mytables ORDER BY myorder ASC LIMIT num) as qqq ORDER BY myorder DESC
SELECT * FROM (SELECT myfields FROM mytables ORDER BY myorder ASC LIMIT num) as qqq ORDER BY myorder DESC
в общем случае хз, а зачем тебе в общем случае?
Интересно.
видимо никак, разе что зная общее количество строк
SELECT myfields FROM mytables ORDER BY myorder DESC LIMIT ($total-$num $num
SELECT myfields FROM mytables ORDER BY myorder DESC LIMIT ($total-$num $num
SELECT myfields FROM mytables ORDER BY myorder DESC LIMIT (COUNT(myfild)-$num $num
SELECT myfields FROM mytables ORDER BY myorder DESC LIMIT ($total-$num $num
хотя это не то что просили )
В общем, это типа второй вариант - SELECT myfields FROM mytablesSELECT COUNT(*) as count FROM mytables WHERE mycondition) as xxx WHERE mycondition ORDER BY myorder LIMIT (xxx.count-numnum.
Всё равно вложенные селекты выходят.
Неужели нет никакого нормального способа это проделать?
Всё равно вложенные селекты выходят.
Неужели нет никакого нормального способа это проделать?
В принципе, как вариант - чтобы расставлялись номера строк во внутреннем селекте (в моём первом примере а потом сортировать уже по этим номерам (а не по первоначальному условию сортировки но это, насколько я понимаю, в простом mysql не сделать - нужны какие-то "триггеры" или что-то такое...
не понимаю, а в чем проблема вложенных запросов?
Время.
Например, будет упорядочиваться уже упорядоченный запрос (1й вариант из моих постов или два раза будет проверяться условие WHERE (2й вариант из моих постов да и простой запрос переписывать под то, чтобы сортировать в обратную сторону в обоих случаях - не так уж и легко, как просто, например, заменить ASC на DESC.
Например, будет упорядочиваться уже упорядоченный запрос (1й вариант из моих постов или два раза будет проверяться условие WHERE (2й вариант из моих постов да и простой запрос переписывать под то, чтобы сортировать в обратную сторону в обоих случаях - не так уж и легко, как просто, например, заменить ASC на DESC.
имхо второй вариант вообще глючный - его нельзя использовать, потому что Limit 10000,10 будет в дохуя раз медленнее работать чем limit 10 взятый с другой стороны
а в первом при первом селекте обрабыватывается 10 (например) и при втором селекте 10, если делать ордер бу по индексному полю, то потяре времени будет незначительно по сравнению с генерацией кода по этой инфе
имхо
а в первом при первом селекте обрабыватывается 10 (например) и при втором селекте 10, если делать ордер бу по индексному полю, то потяре времени будет незначительно по сравнению с генерацией кода по этой инфе
имхоА если делается order by что-то, что достаточно медленно считается?
вообще при втором селекте будет 10 записей (опять же например) против 10000 общего числа записей, помоему соответсвенно он будет в разы быстрее это делать
Тем не менее, а если 1000 записей из 1100?
Все эти способы решения с вложенными селектами - слишком иззвращённые, должен быть способ сделать всё это напрямую.
Все эти способы решения с вложенными селектами - слишком иззвращённые, должен быть способ сделать всё это напрямую.
> если делать ордер бу по индексному полю
по моему опыту, MySQL такую оптимизацию не умеет (правда, 5.x не пробовал): в любом случае всё выбирает, и всё сортирует
Если б умел, форум бы намного быстрее работал
по моему опыту, MySQL такую оптимизацию не умеет (правда, 5.x не пробовал): в любом случае всё выбирает, и всё сортирует
Если б умел, форум бы намного быстрее работал

Оставить комментарий
kruzer25
Чтобы получить первые десять записей в прямом порядке, можно использовать ORDER BY xxx ASC LIMIT 10, чтобы последние десять в обратном - ORDER BY xxx DESC LIMIT 10, а как получить первые 10 в обратном порядке, без вложенных запросов?