1

我正在制作一个任务管理工具。任务的截止日期以时间戳的形式存储在一个名为dueTimeINT 类型的 MySQL 列中。如果任务没有截止日期(很多没有),dueTime 列的值为0。任务需要按dueTime升序显示,没有截止时间的任务在列表后面显示。

我目前的解决方案是SELECT * FROM tasks WHERE dueTime > 0 ORDER BY dueTime,抓取数据,然后运行第二个查询SELECT * FROM tasks WHERE dueTime = 0并添加该数据。它工作得很好,但我想只用一个查询来完成这个。我也宁愿不必添加“有时间”的属性,因为这似乎没有必要。

我见过的其他问题涉及使用GROUP BY,但我不确定在时间戳上使用它是否是必要的或有效的。

在此先感谢您的帮助!

4

2 回答 2

0

我认为您至少有3种可能性:

  • 不要将 0 用作“没有到期时间”,而是使用 99999,这样您就可以保持自然的“ORDER BY dueTime ASC”。(那不是很干净……)

  • 使用您已经提到的两个查询,并将它们与UNION结合起来

  • 正如 Randy 已经提到的,在您的 ORDER BY 子句中使用CASE 。参见这里:mysql 自定义排序

于 2013-03-27T21:58:50.513 回答
0

你可以试试这个:

SELECT * FROM tasks ORDER BY dueDate IS NULL,dueTime
于 2013-03-27T23:38:36.070 回答