0

如果我有一组结果,例如在可视化时看起来像 [ status | 日期]:

[1|2012/01/06],[2|2011/04/23],[3|2012/02/12],[1|2012/11/26],[2|2012/10/13],[3|2010/03/01],[3|2010/06/27]

我将如何对结果进行排序,以便状态为 1 的行优先于状态 2 和 3,然后按日期对这些“拆分”结果进行排序?

如果我通过 ASC 订购状态,那么我最终会得到:

[1|2012/01/06],[1|2012/11/26],[2|2011/04/23],[2|2012/10/13],[3|2012/02/12],[3|2010/03/01],[3|2010/06/27]

这将状态 2 和 3 分开。我想要一个如下所示的结果集:

[1|2012/01/06],[1|2012/11/26],[3|2012/02/12],[3|2010/03/01],[2|2011/04/23],[3|2010/06/27],[2|2012/10/13]

tl;dr 我想按状态 1 或状态 > 1 排序我的结果。我该怎么办?

4

2 回答 2

2

您可以尝试以下方法 -

ORDER BY IF(status = 1, 1, 2) ASC, date ASC
于 2012-04-13T10:22:07.910 回答
1

我会为此做 2 次查询,因为您要问 2 件事。含义:您要求 status=1 并且您要求除 1 订购之外的所有内容。

这些是 2 个独立的问题,那么为什么将它们保留在一个查询中呢?它在您的查询中创建了更多的复杂性。MySQL 在简单查询方面非常快。这也允许清晰的模型功能,例如:

 $Model->getByStatus(1)
 $Model->getByStatus(array(2,3))

甚至您还可以为它们创建单独的函数,例如:

 $Model->getPriorityTickets()
 $Model->getNonPriorityTickets()

这创建了一个更具可读性的选项,它实际上描述了业务,并且不需要控制器了解有关状态 ID 的任何信息。例如,您可以在 getPriorityTickets 中使用另一种方式来定义哪些记录具有优先级,例如:id=1 OR latest_modified > 2 days ago

于 2012-04-13T10:21:14.600 回答