Order by по двум колонкам одновременно.

qru

Новичок
Добрый день

Речь идет НЕ о банальном "Order by kolonka1 desc, kolonka2 desc".

В таблице есть две колонки с датами
1) дата добавления книги
2) дата добавления аудиокниги

Сейчас на сайте можно сортировать только либо по дате добавления книги, либо по дате добавления аудиокниги.

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

Можно конечно теоритически создать еще одну колонку с максимальной датой и делать ORDER BY по ней. Но может быть можно как-то выбирать ту дату которая максимальная. Какая-то конструкция типа
ORDER BY MAX(dobavlenieknigi, dobavlenieaudio) DESC может быть существует?

Спасибо.
 

Вурдалак

Продвинутый новичок
Можно сделать и подобным образом, но нет ничего зазорного в отдельном поле.
 

wadim

Новичок
раньше наступит предел по размеру, но тут вряд ли это грозит
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
select dobavlenieknigi, dobavlenieaudio, IF (dobavlenieknigi > dobavlenieaudio, dobavlenieknigi, dobavlenieaudio) as maxdate from janeznajuanglijskij order by maxdate
 

qru

Новичок
Всем спасибо. Особенно ~WR~!

Понадобился правда небольшой фикс к запросу, т.к dobavlenieaudio бывает Null - и тогда почему-то идут вначале все rows в которых не NULL в dobavlenieaudio.

В общем вот так работает
PHP:
ORDER BY GREATEST (dobavlenieknigi, IF(dobavlenieaudio IS NULL, 0, dobavlenieaudio)) DESC
А иначе
PHP:
dobavlenieknigi	dobavlenieaudio	GREATEST(dobavlenieknigi, dobavlenieaudio)
2009-09-21	2009-10-07	2009-10-07
2009-09-21	2009-10-07	2009-10-07
2009-10-06	2009-10-12	2009-10-12
2009-10-06	2011-04-16	2011-04-16
2009-10-06	2009-10-07	2009-10-07
2009-10-07	2010-06-27	2010-06-27
2009-10-07	2009-10-07	2009-10-07
2009-10-07	2009-10-07	2009-10-07
2009-10-10	2009-10-10	2009-10-10
2009-10-12	2009-10-12	2009-10-12
2009-10-12	2010-05-30	2010-05-30
2009-10-12	2010-10-26	2010-10-26
2009-10-14	2009-10-14	2009-10-14
2009-10-14	NULL	NULL
2009-10-20	2010-06-02	2010-06-02
2009-11-24	2010-01-06	2010-01-06
2009-11-24	2010-12-22	2010-12-22
2009-10-29	2009-11-24	2009-11-24
2009-11-04	2010-06-05	2010-06-05
2009-11-17	2010-03-31	2010-03-31
2009-11-17	2010-04-21	2010-04-21
2009-11-17	2010-03-12	2010-03-12
2009-11-17	2010-03-14	2010-03-14
2009-11-19	2009-11-20	2009-11-20
2009-11-19	2010-04-09	2010-04-09
2009-11-20	2009-11-20	2009-11-20
2009-11-25	2009-11-25	2009-11-25
2009-11-27	NULL	NULL
2009-11-28	2009-11-29	2009-11-29
 
Сверху