私はクエリを開発しようとしています
- currentUserID によって書き込まれなかったすべてのスレッドの最後のメッセージを提供します (現在は、thread_id によるグループ、message_id desc による順序、および WHERE results.sender_id != currentUserID で達成されます)。
- ユーザーがスレッドを開始したが応答を受信しなかった場合、スレッドは表示されません (現時点では、WHERE results.sender_id != currentUserID でデータをフィルタリングするだけで実現されます)。
- このスレッドで応答が送信されたかどうかを示すブール列を提供します (完了していませんが、クエリから最後の要素を見つけて、sender_id が現在ログインしているユーザー ID に等しいかどうかを確認する必要があります)。
http://sqlfiddle.com/#!2/85971/2
あらすじ
- ユーザー 1 はユーザー 2 とメッセージを送信します。
- スレッド ID: 1
- 件名: 「こんにちは件名」
本文:「ハイボディ」
ユーザー 2 は次のように応答します。
- スレッド ID: 1
- 本文: 「ハイ ボディ レスポンス」
ユーザー 1 として SQL が返されます
THREAD_ID |SUBJECT | SENDER_ID | BODY | Responded
1 | Hi Subject | 2 | Hi Body Response | false
ユーザー 2 として SQL が返される必要があります
THREAD_ID |SUBJECT | SENDER_ID | BODY | Responded
1 | Hi Subject | 1 | Hi Body | true
フィドルを見てください
それに対する私のショットは、1エーカーと2エーカーを必要とするが3エーカーを必要としない次のことでした。これを達成するためにUNIONSをいじろうとしましたが、どこにも行きませんでした。
SELECT * FROM (
SELECT t.id as thread_id, t.subject, m.sender_id, m.body
FROM messages m
JOIN threads t ON (m.thread_id = t.id)
ORDER BY t.id asc, m.cdate desc
) as results
WHERE results.sender_id != currentUserID
GROUP BY results.thread_id;