order by - сортировка по дате

elitedesign
На сайте с 25.10.2012
Offline
69
725

Здравствуйте. Возможно что Вы свежим взглядом сможете мне указать на мою ошибку.

У меня дата и время запланированного в будущем звонка оператора по заказу записывается в поле recall (timestamp) в таблице MySQL.

Задача вывести список заказов с обязательными условиями:

1. сначала в списке выводятся заказы у которых время запланированного звонка операторов - СЕГОДНЯ. Затем уже остальные заказы с сортировкой по полю id.

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

Первое удалось реализовать, второе нет. Вот такой строчкой дополняю SQL-запрос:

ORDER BY DATE(`recall`) = CURDATE() DESC, `zakaz`.`id` DESC

В результате действительно выводятся сначала те заказы по которым время звонка оператора запланировано на сегодня. Затем все остальные с сортировкой по полю id.

Не получается модифицировать запрос, чтобы выполнялось условие номер 2.

Буду рад совету или примеру. Спасибо!

Lazy Badger
На сайте с 14.06.2017
Offline
228
#1

Не вступайте в противоестественную связь с головным мозгом читателей, а для начала просто прочитайте, хоть в букваре для ЦПШ по SQL, как хранится тип TIMESTAMP и делайте банальнейший ORDER BY по единственному полю.

Это я еще ничего не говорю о том, кто ставит TIMESTAMP вместо DATETIME... хотя там был бы точно такой же запрос, просто не тащится ненужный оверхед таймзоны в обработке

Да, две разных сортировки в одном запросе - just impossible. Хотя я не DBA, но я что-то не слышал о революциях в SQL в последнее десятилетие

Производство жести методом непрерывного отжига
elitedesign
На сайте с 25.10.2012
Offline
69
#2
LazyBadger:

Да, две разных сортировки в одном запросе - just impossible. Хотя я не DBA, но я что-то не слышал о революциях в SQL в последнее десятилетие

Спасибо за Ваш ответ. Тем не-менее две и более сортировки в одном запросе - работают.

https://stackoverflow.com/questions/2051162/sql-multiple-column-ordering

webiumpro
На сайте с 20.03.2017
Offline
39
#3

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

Копирование лендингов. Разработка на фреймворке сервисов. Создание сайтов (/ru/forum/994418)
Lazy Badger
На сайте с 14.06.2017
Offline
228
#4

elitedesign, ох как все запущено. Ангельского совсем пан не розумиет?

This sorts everything by column1 (descending) first, and then by column2

Означает, что внутри сортировки column1 (при одном и том же значении поля) будет сортировка по column2. Это nested, а не sequential, что на доступном жертвам ЕГЭ уровне (картиночками) показывает ответ https://stackoverflow.com/a/21211388/960558 в этой же теме

ДП
На сайте с 23.11.2009
Offline
203
#5

Есть в mysql еще такая функция FIELD() - сходу не скажу, что подойдёт, но я бы поигрался

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий