MySQL根据条件排序

标签 mysql sql sql-order-by

我需要根据条件查询和排序记录。我有 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/

相关文章:

SQL Server 计算给出了意外的结果

SQL Access 查询-如果存在则更新行,如果不存在则插入

sql - 如果按非唯一属性排序,PostgreSQL 顺序是否得到完全保证?

mysql - 需要帮助优化 mysql 查询以使其按索引快速排序

c# - Fluent NHibernate 和好友关系

php - 调用未定义的方法 pdo::prepare

sql - 使用 psycopg2 在 UPDATE SET 语句中更新超过 1 个 db 列

mysql:顺序 ->限制 ->总和...可能吗?

php - SQL查询如何匹配4个结果中的3个

php - 获取数组中的最后一个值