Mysql ORDER BY с использованием строки данных даты - PullRequest
8 голосов
/ 19 мая 2009

У меня есть запрос примерно такой:

SELECT 
 title, desc, date 
FROM 
 tablename 
ORDER BY 
 date ASC, title ASC;

Прекрасно работает, когда данные действительно имеют дату. Проблема в том, что отправка даты является необязательной, поэтому иногда я получаю 0000-00-00 в качестве даты, что приводит к неудачному расположению всех строк без даты сверху.

Итак, я попробовал это:

SELECT 
 title, desc, date 
FROM 
 tablename 
ORDER BY 
 date DESC, title ASC;

Какие работы, но не на самом деле - все элементы с датами (не 0000-00-00) отображаются в порядке убывания, за которыми следуют все элементы с 0000-00-00.

То, что я хочу сделать, это упорядочить по дате ASC, название ASC, но только если дата! = 0000-00-00, но если дата = 0000-00-00, тогда просто ЗАКАЗАТЬ название ASC на тех ( Я думаю, что объяснил это правильно).

Единственный способ, которым я могу думать, это не на основе SQL (либо 2 запроса, либо каждый запрос просто заполняет массив в памяти, а затем я сортирую с использованием PHP).

Есть ли SQL-запрос, который может это сделать?

Ответы [ 2 ]

9 голосов
/ 19 мая 2009
ORDER BY date = '0000-00-00' ASC, date ASC, title ASC
4 голосов
/ 19 мая 2009

Хорошее решение для двух запросов, вы можете сделать все это в SQL, используя команду UNION.

Первый запрос будет для ненулевых дат, затем UNION в запросе для нулевых дат.

Редактировать: Что-то вроде:

SELECT * FROM tbl 
   WHERE DATE != '0000-00-00' 
   ORDER BY date ASC 
UNION SELECT * FROM tbl
   WHERE DATE = '0000-00-00'
   ORDER BY title ASC

Это может быть не очень полезно в этом случае, но для сложных запросов UNION может пригодиться.

...