Я знаю, что могу заказать две колонки с
ORDER BY col1 DESC, col2 DESC
например.
Но в моем случае это не сработает. У меня есть MySQL-Query, где я хочу отображать события следующих дней, упорядоченных по date
, но также столбцом с именем highlight
.
Потому что есть 3 типа событий: TOP-Premium (+++), Premium (++) и Free (+).
Теперь он заказывает так:
– <пример>
7th May 2013 +FREE EVENT ++PREMIUM +++TOP PREMIUM +++TOP PREMIUM
–
8th May 2013 (same here as on 7th May 2013)
– </ конец примера>
Итак, как вы можете видеть, он приказывает к следующей дате подходит, и это правильно! Но я хочу заказать TOP-Premium-Events вверху, затем Premium-Events и, по крайней мере, бесплатные события.
Конец моего текущего нерабочего запроса:
ORDER BY e.`date` ASC, e.`highlight` ASC");
Я ценю любую помощь или предложения!
ENUM представляются внутренне как числа, в том порядке, в котором они были указаны в декларации. Если вы объявляете столбец как ENUM('2', '1', '0')
, '2'
сохраняется как 1
, '1'
как 2
и '0'
как 3
.
ORDER BY использует эти внутренние номера, а не метки. Если вы хотите заказать по метке, а не внутренний номер, вы должны использовать CAST()
, например
ORDER BY e.`date` ASC, CAST(e.highlight AS CHAR) ASC
Это одна из причин, по которой, как правило, плохая идея использовать числа в качестве меток для ENUM. Документация MySQL рекомендует против нее.
Эмм,
ORDER BY e.date ASC, e.highlight DESC
?
ORDER BY e.date DESC, e.highlight ASC
Поменяйте два столбца – первый порядок по highlight
а затем по дате. Вы получите последовательность, как:
Top premium: 7th may Top premium: 8th may Premium: 7th may Premium: 8th may Free: 7th may ...