2015-12-24 121 views
0

我有3个表项目,讨论&评论。项目有多个讨论,每个讨论都有多个评论。 MySql通过不显示正确的结果排序

我想把最后讨论添加到没有评论的讨论表中。我还需要与特定讨论相关的项目细节。

我的查询是这样的:
SELECT 
    p.PRO_Id, p.PRO_Name, 
    d.DIS_ThreadDesc, dev.DEV_Name, loc.LOC_Name, d.USE_Id, d.DIS_Date
FROM projects p LEFT JOIN discussions d ON p.PRO_Id = d.PRO_Id LEFT JOIN developer dev ON p.DEV_Id=dev.DEV_Id LEFT JOIN locality loc ON p.LOC_Id=loc.LOC_Id WHERE p.PRO_Status=1 and d.DIS_Status=1 AND d.DIS_Id NOT IN (select DIS_Id from comments where COM_Status=2) GROUP BY p.PRO_Id ORDER BY d.DIS_Id desc LIMIT 3

我按降序(ORDER BY d.DIS_Id)订购讨论表,但仍需要第一条记录而不是最后一条记录。我在这里做错了什么?

+0

如果你喜欢,可以考虑下列行为这个简单的两步过程:1.如果您还没有这样做,提供适当的创建和插入语句(和/或sqlfiddle ),这样我们就可以更容易地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相符的所需结果集。 – Strawberry

+0

好的,我会尝试放置一个sqlfiddle以获得更多的说明。 – rahul

+0

你想在每个项目中进行最后的讨论吗? – Barmar

回答

2

试试这个:

SELECT p.PRO_Id, p.PRO_Name, d.DIS_ThreadDesc, dev.DEV_Name, 
     loc.LOC_Name, d.USE_Id, d.DIS_Date 
FROM projects p 
INNER JOIN discussions d ON p.PRO_Id = d.PRO_Id 
INNER JOIN (SELECT d.PRO_Id, MAX(d.DIS_Id) lastDisc 
      FROM discussions d 
      WHERE d.DIS_Status = 1 
      GROUP BY d.PRO_Id 
     ) AS A ON d.PRO_Id = A.PRO_Id AND d.DIS_Id = A.lastDisc 
LEFT OUTER JOIN comments c ON d.DIS_Id = c.DIS_Id AND c.COM_Status=2 
LEFT OUTER JOIN developer dev ON p.DEV_Id = dev.DEV_Id 
LEFT OUTER JOIN locality loc ON p.LOC_Id = loc.LOC_Id 
WHERE p.PRO_Status = 1 AND c.DIS_Id IS NULL 
ORDER BY d.DIS_Id DESC; 
+1

是的,这就是我正在寻找那个.. – rahul

+1

@Mr Shah对于这样的问题,我应该把sqlfiddle更准确,或者我的问题已经给你一个清晰的描述我的要求。 – rahul

+0

@Plum如果你用示例数据添加演示程序,以便每个人都能理解你面临的问题是什么,这是很好的... –