Порядок сортировки MySQL по отметке времени и перечислению - PullRequest
2 голосов
/ 14 февраля 2012

Я пытаюсь отсортировать порядок по отметке времени и перечислению (отметка времени основного порядка, перечисление «подзаказа»), но, похоже, работает только одна или другая.

Это очень простая таблица, которая называется table:

id | task | date_estimated [timestamp] | status [enum]

Я пробовал:

select * from table order by date_estimated DESC, status DESC

что, теоретически, должно дать мне что-то, что отсортировано по состоянию enum на дату, верно?

3/5/2012
added - gas up
done - buy milk
done - buy pencils

Но это мешает мне, как

3/5/2012
done - buy milk
added - gas up
done - buy pencils

Как мне написать запрос для сортировки, как в первом случае?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Попробуйте

select * from table order by DATE(date_estimated) DESC, status DESC

Поле метки времени включает часы / минуты / секунды, поэтому вы получите нечетный порядок, если вы ищете фактическую часть даты, учитывая, что событие должно произойти в ту же секунду, чтобы подгруппа имела смысл в вашем запросе.

1 голос
/ 14 февраля 2012

Проверьте этот абзац из документации MySQL:

ENUM значения сортируются в соответствии с порядком, в котором перечисление члены были перечислены в спецификации столбца. (Другими словами, ENUM значения сортируются в соответствии с их порядковыми номерами.) Например, «а» сортирует перед 'b' для ENUM ('a', 'b'), но 'b' сортирует перед 'a' для ENUM ('b', 'a'). Пустая строка сортируется перед непустыми строками, и Значения NULL сортируются перед всеми другими значениями перечисления. Предотвращать неожиданные результаты, укажите список ENUM в алфавитном порядке. Вы можете также используйте ORDER BY CAST (col as CHAR) или ORDER BY CONCAT (col), чтобы сделать убедитесь, что столбец отсортирован лексически, а не по порядковому номеру.

Каждое значение перечисления отображается на число (его порядковый номер), и это значение используется при сортировке. Вот почему он не отсортирован по строковому представлению в ваших результатах.

http://dev.mysql.com/doc/refman/5.0/en/enum.html

...