Форум пользователей MySQL
к сожалению, это не помогло. Сортировка теперь такая — публикуются вначале старые, потом новые датированные тексты. Нужно же наоборот. Что интересно — поставил asc вместо desc — ничего не поменялось. К тому же теперь, вообще не видно даты. только точка вместо даты.
#4 17.01.2010 23:11:20
vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5818
Re: сортировка по дате
SELECT DATE_FORMAT ( ` date `, ‘%d.%m.%Y’ ) AS d from tinisto ORDER BY ` date ` desc
#5 18.01.2010 01:29:49
LazY _cмельчак Зарегистрирован: 02.04.2007 Сообщений: 845
Re: сортировка по дате
Плохо давать колонкам SELECT’ов псевдонимы, совпадающие с именами колонок таблицы, если потом надо сортировать или группировать по ним — получается путаница.
#6 18.01.2010 07:55:37
tinisto Участник Зарегистрирован: 17.01.2010 Сообщений: 5
Re: сортировка по дате
Сортировка работает верно в этом случае, но дата не отображается (только точка).
#7 18.01.2010 08:47:37
vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5818
Re: сортировка по дате
test >SELECT DATE_FORMAT ( ` date `, ‘%d.%m.%Y’ ) AS d from a ORDER BY ` date ` DESC ;
+ ————+
| d |
+ ————+
| 17.01 .2010 |
| 16.01 .2010 |
| 17.12 .2009 |
| 17.01 .2009 |
+ ————+
4 rows in set ( 0.02 sec )
Вы хотите сказать, что при замене в запросе только псевдонима у вас изменяется отображение даты (в одном случае правильно, в другом точка)? Если так, то приведите оба запроса с результатом выборки.
#8 18.01.2010 08:58:50
tinisto Участник Зарегистрирован: 17.01.2010 Сообщений: 5
Re: сортировка по дате
SELECT DATE_FORMAT( ‘date’, ‘%d.%m.%Y’ ) AS d
FROM a
ORDER BY ‘date’ DESC
LIMIT 0 , 30
Ошибка видна. Как это теперь исправить?
Поле date — тип date, Ноль — стоит null. Ставлю not null. Все равно null возвращается.
#9 18.01.2010 09:00:44
vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5818
Re: сортировка по дате
‘date’ — это строка
`date` — это колонка. Имя колонки взято в обратные кавычки, так как date является ключевым словом. Вообще это плохая практика давать колонкам или таблицам имена, являющиеся ключевыми словами.
В вашем случае попытка вычислить время от строковой константы приводит к закономерному результату.
#10 18.01.2010 11:29:21
tinisto Участник Зарегистрирован: 17.01.2010 Сообщений: 5
Re: сортировка по дате
Vasya, благодарю Вас! Все получилось.
Страниц: 1
- Список
- » Раздел для начинающих
- » сортировка по дате
Сортировка по дням рождения стр. 1
Такая сортировка может потребоваться, например, для установления очередности празднования дней рождения сотрудников. Особенность подобной сортировки заключается в том, что год не учитывается вовсе, а даты упорядочиваются сначала по месяцу, а потом по дню месяца.
Возьмём в качестве примера таблицу Battles, а именно, столбец date . Ясно, что сортировка просто по дате ( date ) не даст желаемого результата из-за года (так, например, 15-е ноября будет предшествовать 20-му октября):
Консоль
Выполнить

Для выполнения требуемой сортировки можно предложить два варианта ( Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server ).
1. Использование функции CONVERT
При этом способе мы преобразуем дату к текстовому представлению в формате «mm-dd»

Консоль
Выполнить
по которому и выполним сортировку:

Консоль
Выполнить
2. Использование функций MONTH и DAY
Здесь мы используем встроенные функции, которые возвращают компоненты даты — месяц ( MONTH ) и день ( DAY ) соответственно. По этим компонентам выполним сортировку:

Консоль
Выполнить
Что касается производительности, то вы можете выбрать любой вариант, т.к. оптимизатор строит для них идентичные планы.
В заключение представим последний запрос в более наглядном виде, добавив в него еще и «виновника торжества»:

Консоль
Выполнить
Как сортировать список, взятый из БД, по месяцу и дню?
Но проблема в том, что список сортируется по дате рождения неккоректно. Некоторые пользователи, например, с 11 месяцем перепрыгивают тех, у кого 10 месяц.
Помогите, пожалуйста, исправить это.
- Вопрос задан более трёх лет назад
- 4307 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 2
web-программист (*AMP, Go, JavaScript, вёрстка).
1. Если ты хочешь отсортировать именно по месяцу и дню без года, то какого чёрта добавляешь в шаблон форматирования даты %Y?
2. Если же ты сортируешь по полной дате и поле bd имеет тип DATE, DATETIME. TIMESTAMP и т.п. (т.е. тип, предназначенный для хранения даты) то никаких извращений с DATE_FORMAT не требуется — просто ORDER BY bd DESC.
3. Для ситуации, когда поле не заполнено, в SQL если специальное значение NULL. Костыли в виде bd!=’0′ — ещё один бред.
Ответ написан более трёх лет назад
Нравится 2 4 комментария

Антон @hummingbird Автор вопроса
Спасибо за советы, но все равно выводит не четко:
SELECT * FROM users WHERE bd!=’NULL’ ORDER BY bd DESC

@proFox bd!=’NULL’ — это что еще за хня? если вам надо проверять на не null — так и делайте это правильно! bd IS NOT NULL . откройте доки. что вы чушь пишите

Антон @hummingbird Автор вопроса
@maNULL спасибо за подсказку, но суть не в этом.

ORDER BY bd выведет чотка если тип поля DATE, DATETIME. TIMESTAMP, вам же написали. А так может и приглючивать. Более того у вас в примере — DESC поэтому и 11 месяц раньше 10.
ИМХО как то так.
sql: Сортировка по дате
Доброго времени суток. Подскажите пожалуйста как мне отсортировать все записи по дате, но не только по возрастанию, но и начиная от сегодня, например: 6 декабря (ближайшая дата) 12 декабря 3 января 6 июня 1 декабря Другой пример: Например сегодня 6 июня 6 июня 1 декабря 6 декабря 12 декабря 3 января Часть решения у меня уже есть:
SELECT * FROM db ORDER BY DATE_FORMAT(begin, '%m%d')
используя where не вариант, т.к надо выводить все записи.
Отслеживать
задан 6 дек 2015 в 12:46
91 1 1 золотой знак 1 1 серебряный знак 8 8 бронзовых знаков
Почему 1 декабря в примере стоит на последнем месте?
– user177221
6 дек 2015 в 12:49
Потому что по сути у нас есть записи за весь год от 1го января и до 31 декабря. и нам нужно их отсортировать так, что бы выводились все даты которые ближе к сегодняшней и шли по порядку) т.е получается этакий круг.
6 дек 2015 в 12:54
И что должно быть в сортировке с записями, которые ДО текущей даты ? Как нибудь пример поправьте, например текущую дату возьмите за июль и несколько дат ДО и ПОСЛЕ текущей
6 дек 2015 в 12:56
И мне, как пользователю, например, совершенно непонятно будет почему я должен искать довольно близкую дату 1 декабря где то в конце списка. Я бы еще понял если бы это было 1 декабря следующего года, но года тут нет
6 дек 2015 в 12:58
Указал доп. пример. Это надо для вывода ближайших события, но по порядку. Пользователю будет не очень интересно смотреть какие события были до сегодня, а если и будет интересно, то он воспользуется фильтром, но фильтр это уже совсем другая тема 🙂
6 дек 2015 в 13:02
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
select B.* from ( select db.*, DATE_FORMAT(begin, '%m%d') - DATE_FORMAT(now(), '%m%d') as DIFF from db ) B ORDER BY (CASE WHEN diff
В принципе можно без подзапроса, но мне не нравится выписывать длиннющие строки с date_format . Но основная идея: получаем число, "расстояние" от текущей даты до тестируемой и если оно меньше 0 (Дата до текущей) то увеличиваем "расстояние" так, что бы оно оказалось после всех дат, которые после
