mySQL>通过查询帮助复杂ORDER

时间:2011-06-06 00:26:19

标签: mysql sql sql-order-by left-join

我不是SQL的专家,所以我在这里问一些关于以下情况的帮助:

我有2张桌子; 1个表格“任务”(ID,TITLE,CREATEDAT)和1个表格“活动”(ID,TASK_ID,TITLE,CREATEDAT)其中CREATEDATDATETIME列。

我想在任务和活动中列出最后CREATEDAT列的排序任务!我的意思是,拥有最近的任务(CREATEDAT AND,它具有最近的活动,例如任务和活动表的联合......)但我真的不知道如何处理?

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

如果任务没有任何活动,则按最近活动或创建日期订购任务:

SELECT t.id, t.title 
  FROM task AS t
    LEFT JOIN activity AS a ON t.id=a.task_id
  GROUP BY t.id
  ORDER BY COALESCE(MAX(a.createdat), t.createdat) DESC

答案 1 :(得分:2)

SELECT * FROM `task` T1 
    JOIN `activity` T2 ON T1.ID = T2.TASK_ID
    ORDER BY T1.CREATEDAT, T2.CREATDAT DESC

答案 2 :(得分:1)

如果您想要显示所有任务,即使他们没有活动,我认为这正是您所寻找的。

sekect task.id, task.title, activity.id, activity.title
from task
left join activity
order by task.createdat, activity.createdat desc

编辑:我将提供一个简短的解释,可以帮助您了解更多。

该语句基本上告诉数据库获取任务表和活动表中特定列“id”和“title”中的所有信息 - 这是sekect task.id, task.title, activity.id, activity.title子句。

任何查询都将始终使用from关键字搜索至少一个表。在这种情况下,我们使用from task来搜索任务表。但是,对于此示例,您需要两个表的并集,需要使用join关键字。使用join可以让我们以多种方式搜索多个表格。在这种情况下我们使用left join;如果您想对此进一步解释,请发表评论。

最后,我们只是按任务创建日期,然后是活动创建日期和指定的降序(最早的,最新的最后一个)来排序数据。

请注意,通常情况下,使用select *不是最佳选择。它现在可能满足您的需求,但如果您要构建更多查询,则需要指定要显示的列,如我的示例所示。