2012-05-26 80 views
0

這裏的情況:SQL:論壇整理行爲(CI中)

在我的數據庫我有螺紋表,並與回覆的表格。兩者都有一個時間戳字段。

現在我正在開發一個論壇,並希望通過以下方式訂購主題:

  • 如果線程有回覆,則:ORDER BY tblReply.Timestamp DESC
  • 否則,線程沒有回覆:ORDER BY tblThread.Timestamp DESC

我不知道如何在一個語句中合併這2個。

我的查詢,因爲它現在是:

SELECT `PK_ThreadID`, `Title`, `tblUsers`.`Username`, `tblThread`.`Date`, count(tblReply.FK_ThreadID) AS number_replies FROM (`tblThread`) 
JOIN `tblUsers` ON `tblUsers`.`PK_UserID` = `tblThread`.`FK_UserID` 
LEFT JOIN `tblReply` ON `tblReply`.`FK_ThreadID` = `tblThread`.`PK_ThreadID` 
WHERE `isExpertQuestion` = 0 AND `isPublic` = 1 
GROUP BY `PK_ThreadID` 
ORDER BY max(tblReply.Date)` desc 

//Here it only orders by reply date, so threads with no replies appear at the bottom 

我要如何實現,我想在此查詢的順序?

回答

1

喜歡這大概是:

SELECT `PK_ThreadID`, `Title`, 
`tblUsers`.`Username`, 
`tblThread`.`Date`, 
count(tblReply.FK_ThreadID) AS number_replies 
FROM (`tblThread`) 
JOIN `tblUsers` ON `tblUsers`.`PK_UserID` = `tblThread`.`FK_UserID` 
LEFT JOIN `tblReply` ON `tblReply`.`FK_ThreadID` = `tblThread`.`PK_ThreadID` 
WHERE `isExpertQuestion` = 0 AND `isPublic` = 1 
GROUP BY `PK_ThreadID` 
ORDER BY 
CASE WHEN COUNT(tblReply.FK_ThreadID) > 0 THEN tblReply.Timestamp 
    WHEN COUNT(tblReply.FK_ThreadID) = 0 OR tblReply.FK_ThreadID IS NULL 
THEN tblThread.Timestamp 
END DESC 
+0

增加了MAX()這個和它的工作完美,感謝 – matthiasdv