如果我有一组结果,例如可视化时看起来像[ status | date ]:
[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.我该怎么办?
答案 0 :(得分:2)
您可以尝试以下方法 -
ORDER BY IF(status = 1, 1, 2) ASC, date ASC
答案 1 :(得分:1)
我会为此做2次查询,因为你要求2件事。含义:你要求status = 1并且你要求除了1个以外的所有东西。
这是两个单独的问题,为什么要将它们保存在一个查询中呢?它会在查询中创建更多复杂性。 MySQL在简单查询方面非常快。这也允许清晰的模型函数,例如:
$Model->getByStatus(1)
$Model->getByStatus(array(2,3))
您还可以为它们创建单独的功能,例如:
$Model->getPriorityTickets()
$Model->getNonPriorityTickets()
这创建了一个更具可读性的选项,它实际上描述了业务,并且不需要控制器知道有关状态ID的任何信息。例如,您可以在getPriorityTickets中使用另一种方法来定义哪些记录具有优先权:id = 1 OR latest_modified> 2天前