在第二个表中按日期排序结果

时间:2013-01-19 03:07:10

标签: mysql select group-by sql-order-by

有点背景......

我目前有一个客户端区域供客户登录并查看他们的工作进度并留下任何评论等。在客户区,我有一个管理区域,可以让我登录并查看所有工作。一切都很好,但我希望能够整理一下。

该数据库由4个表组成,其中2个表与此查询相关...作业和帖子。目前,该列表仅使用以下内容显示每个客户的完整作业列表:

$result = mysql_query("SELECT * FROM Jobs ORDER BY date DESC"); 

然后:

<a href="jobdetail.php?clientid='. $row['ClientID'].'&jobid='.$row['JobNumber'].'">'. $row['Username'].' - '. $row['ClientID'].'.'.$row['JobNumber'].' - '.$row['Description'].' - '.$row['Status'].'</a>

正如您所看到的,详细信息来自数据库并进行了回显,然后将整个内容链接到从其ClientID和JobNumber加载作业的页面。所有客户端都可以拥有一个作业号1,例如ClientID:12345和ClientID:12346都可以拥有JobNumber1。目前这一切都运行正常,但我希望在顶部的帖子表格中找到与其相关的最新帖子的作业,然后是最新的,等等。

经过一些研究,我得到了这个:

SELECT
Jobs.*
FROM Jobs
LEFT JOIN Posts ON Posts.JobNumber=Jobs.JobNumber
GROUP BY
Jobs.ClientID, Jobs.JobNumber
ORDER BY Posts.PostDate

虽然我得到了所有结果,但我没有按照帖子的日期顺序得到它们。我有一种感觉,因为我实际上并没有从Posts表中提取PostDate值,但是我已经尝试了加载,而且我没有设法让任何东西工作!

如果有人能给我任何指示,我将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

搞定了:

SELECT
c.ClientID
, j.JobNumber , j.Username , j.Description , j.ClientID , j.Status , j.AdminUnread
, MAX(p.PostDate) as postedOn
FROM Clients c
INNER JOIN Jobs j ON c.ClientID=j.ClientID
LEFT JOIN Posts p ON j.JobNumber=p.JobNumber AND c.ClientID=p.ClientID
GROUP BY
c.ClientID
, j.JobNumber
ORDER BY
postedOn DESC, c.ClientID, j.JobNumber DESC

答案 1 :(得分:0)

试试这个:

SELECT *  
FROM Jobs j 
INNER JOIN ( SELECT p.* 
             FROM posts p 
             INNER JOIN (SELECT JobNumber, MAX(postdate) postdate 
                         FROM posts GROUP BY jobnumber
                        ) a ON p.JobNumber = a.JobNumber AND a.postdate = p.postdate
           ) p ON p.JobNumber = j.JobNumber 
GROUP BY j.ClientID, j.JobNumber 
ORDER BY p.PostDate;