次のテーブル構造のディスカッション ボードがあります。
+-------------------------------+
| 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_reply
がwritten
考慮される会話の順序ですが、利用可能な場合last_reply
は が優先されwritten
ます。
が利用可能な場合last_reply
は、その値を使用して順序付けを行います。そうでない場合は、書面を使用します。
これがひどく説明されている場合は申し訳ありません。
これまでの私のベストショットはこれです:
SELECT *, COALESCE(last_reply,written) AS tmp FROM messages
WHERE parent = 0 ORDER BY written DESC, tmp DESC
これは正しく動作しません。
あなたが私の主張を理解したら、正しい方向に私を導いてください:)
ありがとう。