0

状況は次のとおりです。

私のデータベースには、スレッドのあるテーブルと応答のあるテーブルがあります。どちらにもタイムスタンプフィールドがあります。

現在、フォーラムを開発しており、次の方法でスレッドを注文したいと考えています。

  • スレッドに応答がある場合は、次のようになります。ORDER BY tblReply.Timestamp DESC
  • それ以外の場合、スレッドには応答がありません:ORDER BY tblThread.Timestamp DESC

これら2つを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 max(tblReply.Date)` desc   

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

このクエリで必要な順序をどのように達成しますか?

4

1 に答える 1

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
于 2012-05-26T15:35:01.907 に答える