2015-12-24 95 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如果你用示例數據添加演示程序,以便每個人都能理解你面臨的問題是什麼,這是很好的... –