副選択なしで次のクエリを実行する方法はありますか?
SELECT * FROM
(
SELECT * FROM messaging_message WHERE recipient_id=4 ORDER BY timestamp DESC
) combined
GROUP BY thread_id HAVING status='unread'
テーブル:
`messaging_message`
- id
- thread_id
- content
- sender_id
- recipient_id
- timestamp
- status
スレッドIDは、メッセージの親スレッドです。
更新:これまでの2つの回答のテストでは、どちらのクエリも必要な結果を生成していません。
クエリは、メッセージスレッドの最新のメッセージ='unread'である結果のみを返す必要があります。以下の両方のクエリは、ステータス='unread'のメッセージを持つスレッドの最上位の結果を返します。
私がやろうとしているのは、Gmailなどのメールの受信トレイのようなものです。受信トレイの最初のページに25個のスレッドが表示されているとします。status ='unread'の最新のメッセージを持つスレッドのみを強調表示したいと思います(最新のメッセージより古いメッセージのステータスは無視します)。
これがGROUP BY
、順序付けられた結果でを使用している理由でもあります。そのため、最新の結果のみを取得し、それらの結果のうち、status='unread'の結果を確認します。
(説明をより明確にするために、上記のクエリのステータスも「削除済み」から「未読」に変更したことに注意してください。)