0

次のテーブル構造のディスカッション ボードがあります。

+-------------------------------+
|       TABLE: MESSAGES         |
+-------------------------------+
| id             | int(11)      |
+-------------------------------+
| parent         | int(11)      |
+-------------------------------+
| author         | int(11)      |
+-------------------------------+
| last_reply     | datetime     |
+-------------------------------+
| written        | datetime     |
+-------------------------------+
| title          | varchar(256) |
+-------------------------------+
| content        | text         |
+-------------------------------+

のデフォルト値last_replyは NULL です。スレッドが返信されると、そのスレッドlast_reply内のすべてのメッセージの が最後の返信の日時に設定されます。

私が達成しようとしているのは、 と の両方last_replywritten考慮される会話の順序ですが、利用可能な場合last_replyは が優先されwrittenます。

が利用可能な場合last_replyは、その値を使用して順序付けを行います。そうでない場合は、書面を使用します。

これがひどく説明されている場合は申し訳ありません。

これまでの私のベストショットはこれです:

SELECT *, COALESCE(last_reply,written) AS tmp FROM messages
WHERE parent = 0 ORDER BY written DESC, tmp DESC

これは正しく動作しません。

あなたが私の主張を理解したら、正しい方向に私を導いてください:)

ありがとう。

4

2 に答える 2

3
SELECT * FROM messages
WHERE PARENT=0
ORDER BY IFNULL(last_reply,written) DESC
于 2012-05-13T14:16:51.913 に答える
0

これを試して:

SELECT *, COALESCE(last_reply,0) AS with_replay FROM messages
WHERE parent = 0
ORDER BY with_replay DESC,written DESC 
于 2012-05-13T14:27:49.767 に答える