2013-03-27 2 views
1

Я создаю инструмент управления задачами. Сроки выполнения заданий сохраняются как временная метка в столбце MySQL с именем dueTime с типом INT. Если задание не имеет установленной даты (многие этого не делают), значение столбца dueTime равно 0. Задачи должны отображаться в порядке по возрастанию dueTime, причем те, у кого нет времени, появляющегося позже на список.Сортировка запроса MySQL по возрастанию значения ЗА ИСКЛЮЧЕНИЕМ 0

Мое текущее решение: SELECT * FROM tasks WHERE dueTime > 0 ORDER BY dueTime, захватите данные, а затем запустите второй запрос SELECT * FROM tasks WHERE dueTime = 0 и добавьте следующие данные. Он работает отлично, но я хотел бы выполнить это только с одним запросом. Я также предпочел бы не добавлять атрибут «имеет должное время», поскольку это кажется ненужным.

Другие вопросы, которые я видел, связаны с использованием GROUP BY, но я не был уверен, что если использовать это на отметках времени, будет необходимо или эффективно.

Заранее благодарим за помощь!

+0

можно поставить саз в ORDER BY предложения. – Randy

+2

Если вы выполняете 'ORDER BY dueTime = 0, dueTime' строки, для которых dueTime = 0 будет сортироваться после остальных. –

ответ

0

вы могли бы попробовать это:

SELECT * FROM tasks ORDER BY dueDate IS NULL,dueTime 
0

Я думаю, что у вас есть по крайней мере 3 возможности:

  • Не используйте 0, как «не свое время», но 99999, так что вы можете сохранить естественный «ORDER BY dueTime ASC». (Это не очень чистый ...)

  • Используйте два запроса, как вы уже упоминали, и объединить их с UNION

  • Использование CASE в вашем ORDER BY предложении, как и Рэнди уже упоминалось. Смотрите также здесь: mysql custom sort

Смежные вопросы