У меня есть таблица с названием months
— она содержит все 12 месяцев календаря, идентификаторы соответствуют номеру месяца.
Я буду запускать запрос, чтобы получить 2 или 3 последовательных месяца из этой таблицы, например
- Апрель Май
- Июнь Июль Август
- Декабрь и январь
Однако я хочу убедиться, что всякий раз, когда декабрь является январем и извлекается, он извлекает их в этом порядке, а не с января по декабрь. Вот что я пробовал:
SELECT * FROM `months`
WHERE start_date BETWEEN <date1> AND <date2>
ORDER BY
FIELD(id, 12, 1)
Это работает для декабря и января, но теперь, когда я пытаюсь получить январь и февраль, он выполняет их в неправильном порядке, например, «февраль — январь» — я предполагаю, потому что мы указали 1
в ORDER BY
в качестве последнего значения.
Кто-нибудь знает правильный способ добиться этого? Как я уже упоминал, это также должно работать в течение 3 месяцев, поэтому, например, «ноябрь, декабрь, январь» и «декабрь, январь, февраль» следует извлекать все в указанном порядке.
Я не понимаю. Ваш вопрос касается января и февраля, но ваш запрос относится к декабрю и январю!?! — person MAXIM schedule 09.05.2020
Я думаю, нам нужен вопрос, более направленный на реальную проблему — person MAXIM schedule 09.05.2020
Как вы передадите список номеров? — person MAXIM schedule 09.05.2020
Если вы хотите сначала декабрь, а остальные месяцы по порядку, тогда:
MySQL обрабатывает логические значения как числа, где «1» означает истину, а «0» — ложь.
desc
ставит12
на первое место.РЕДАКТИРОВАТЬ:
Чтобы справиться с более общим случаем, вы можете использовать оконные функции. Если предположить, что числа идут подряд, проблема усложняется. Это будет работать для интервалов в 2 и 3 месяца:
Я не хочу думать о более общем решении, основанном только на месяцах. В конце концов, вы можете просто использовать:
Или, если у вас есть запрос агрегирования:
чтобы решить настоящую проблему.
Спасибо чувак! Иногда мы слишком усложняем!
— person MAXIM; 09.05.2020
order by start_date
— это все, что мне нужно для правильной работы! Спасибо еще разЭто неправильно «решение mysql»:
результат:
В основном в MySQL это можно сделать так же: