我需要根据条件查询和排序记录。我有 table :
任务(id、date_due、created_at、...)
和TASK_DEPENDENCIES (task_id, dependency_task_id)
,多对多关系表,其中依赖项 task_id 和 dependency_task_id 是 TASKS 表的 FK。
通常我会查询任务并按 date_due
排序。但由于我们有任务依赖性,我想这样订购:
- 第一个没有依赖项的任务,按 date_due 排序
- 下一个任务的依赖项按 date_due 排序
我现在的解决方案是,我只需创建 2 个单独的查询并将其提供给表。是否可以仅通过一个查询来完成此操作?它的效率(快)如何?
更新:我现有的 SQL
非依赖任务
SELECT T.id, TD.dependency_task_id FROM tasks T
LEFT OUTER JOIN task_dependencies TD ON T.id = TD.task_id
WHERE assigned_user_id=1 AND TD.dependency_task_id IS null
ORDER BY T.date_due
依赖任务:
SELECT T.id, TD.dependency_task_id FROM tasks T
LEFT OUTER JOIN task_dependencies TD ON T.id = TD.task_id
WHERE assigned_user_id=1 AND TD.dependency_task_id IS NOT null
ORDER BY T.date_due
最佳答案
您可以在 ORDER BY 子句中使用表达式。假设您有一个联接,其中 TASK_DEPENDENCIES 表的别名为“DEP”。在 ORDER BY 子句中,使用如下内容:
ORDER BY IF(DEP.task_id IS NULL, 0, 1), date_due
这将首先对没有依赖项的所有任务进行排序(按 date_due),然后再对具有依赖项的任务进行排序(同样按 date_due)。
关于MySQL根据条件排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296047/