Я получаю массив с заголовками todo и соответствующими датами из MySQL. Я хочу заказать его по дате и иметь самый старый на вершине. Но есть некоторые todos без даты. Эти топы, которые я не хочу показывать на первых позициях, а в нижней части списка. К сожалению, MySQL сначала поставил пустые.
Есть ли способ сделать это в одном запросе (нельзя использовать MySQLi, используя ActiveRecord CI). Я мог бы выполнить второй запрос для всех todos без дат и поместить их внизу. Но я хотел бы сделать это в одном запросе – если возможно?
Вы можете сделать это в MySQL с предложением ORDER BY
. Сначала сначала NULL
, затем дату.
SELECT * FROM your_table ORDER BY (date_column IS NULL), date_column ASC
Примечание. Предполагается, что строки без даты имеют NULL
.
да
SELECT * FROM table ORDER BY CASE your_date WHEN '' THEN 'b' ELSE 'a' END, date ASC
возможно, добавьте NVL( thedate, to_date('2099-12-31','yyyy-mm-dd'))
в порядке по порядку
Вы можете использовать это:
select * from my_table order by if(isnull(my_field),1,0),my_field;
Ну, как чистый ответ MySQL, я бы, наверное, сделал это так.
select todo.title, todo.due_date from todo order by ifnull(todo.due_date, '9999-12-31')