SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.05.2014 13:06:21

kerrygun
Участник
Зарегистрирован: 28.05.2014
Сообщений: 4

Помогите с сортировкой.

Всем привет.

Сломалась голова, не выдает ответ, помогите.
Есть куча записей в которых есть поля type (варианты значений 0, 1, 2), date и end_date, start_date, last_action - это все даты.
Нужно их отсортировать таким образом: сначала идут те, у которых type = 1 и end_date >= текущей даты, отсортированные по start_date desc; потом идут все остальные (включая type = 1 с end_date < текущей), отсортированные по last_action desc.

Неактивен

 

#2 28.05.2014 13:34:26

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите с сортировкой.

(SELECT ... WHERE type = 1 AND end_date >= now() ORDER BY start_date DESC) UNION (SELECT ... WHERE type!=1 OR end_date<now() ORDER BY last_action DESC);


Можно написать одним запросом, через IF в условии сортировки, но это лишнее.
ORDER BY (type = 1 AND end_date >= now()) DESC, IF(type = 1 AND end_date >= now(), start_date, last_action) DESC;

Неактивен

 

#3 28.05.2014 13:49:08

kerrygun
Участник
Зарегистрирован: 28.05.2014
Сообщений: 4

Re: Помогите с сортировкой.

Спасибо.

Вообще, записей там будет море, это основные посты сайта, с разбивкой на страницы, какой из вариантов будет быстрее?

Неактивен

 

#4 28.05.2014 14:17:47

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите с сортировкой.

По скорости скорее всего быстрее UNION, но может быть одинаково.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson