我有一组需要同时以多种方式排序的数据。
简化后,该表可概括为:
任务
- ID
- 组(整数)
- 日期(日期)
- 完成 (0/1)
我需要生成这些任务的列表,主要按“完成”排序,其次按“日期”排序,然后按“组”分组。
该小组是导致我出现问题的原因,我觉得这可能用 PHP 更好地实现,因为它可能无法作为查询的一部分 - 欢迎提供有关解决此问题的最佳方法的提示,当然不会必须是纯mysql。
目前我正在使用:
ORDER BY complete, group, date
这对于“未分组”任务非常有效,所有未完成的 (0) 任务都在顶部,完整的 (1) 任务在底部;每组完成/未完成的任务按日期排序。
然而,一个组最终可能会聚集在底部,在更广泛的背景下日期排序不正确 - 鉴于其任务日期,该组本身没有被放置。这是不需要的输出(有序)的示例:
Task #2 - Group(false), Complete(0), date(2013-11-01)
Task #4 - Group(false), Complete(0), date(2013-12-01)
Task #5 - Group(1), Complete(0), date(2013-10-01)
Task #3 - Group(1), Complete(0), date(2013-12-01)
Task #1 - Group(false), Complete(1), date(2013-11-01)
如您所见,分组项目的日期排序不正确,排序发生在组内。任务 #5 排在第三位,尽管它的日期最早。
我想看到的输出如下:
Task #5 - Group(1), Complete(0), date(2013-10-01)
Task #3 - Group(1), Complete(0), date(2013-12-01)
Task #2 - Group(false), Complete(0), date(2013-11-01)
Task #4 - Group(false), Complete(0), date(2013-12-01)
Task #1 - Group(false), Complete(1), date(2013-11-01)
即,如果组中的任务的日期早于单个任务,则应首先对整个组进行排序(想象在组中您只能看到“顶部”任务,因此任务#3 将在视觉上折叠)。
我尝试过更改“ORDER BY”子句的顺序,但似乎任何组合都无法达到我所追求的效果——某些东西总是出现在错误的位置。
非常感谢任何帮助。