【问题标题】:Sort MySQL query by ascending value EXCEPT FOR 0按升序对 MySQL 查询进行排序,EXCEPT FOR 0
【发布时间】:2013-03-28 08:45:25
【问题描述】:

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

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

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

提前感谢您的帮助!

【问题讨论】:

  • 可以在 ORDER BY 子句中加入 CASE 语句。
  • 如果您执行ORDER BY dueTime = 0, dueTime,dueTime = 0 的行将排在其他行之后。

标签: mysql sorting int


【解决方案1】:

你可以试试这个:

SELECT * FROM tasks ORDER BY dueDate IS NULL,dueTime

【讨论】:

    【解决方案2】:

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

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

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

    • 正如 Randy 已经提到的,在您的 ORDER BY 子句中使用 CASE。参见此处:mysql custom sort

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 2019-07-23
      • 2013-05-04
      • 1970-01-01
      • 2012-11-29
      • 2011-12-08
      • 2011-07-30
      • 1970-01-01
      相关资源
      最近更新 更多