Twitter の DM サービスに似た既存のメッセージング システムを再構築しようとしています。現在、未読メッセージのみをユーザーに表示していますが、次のように 2 人のユーザー間で送信されたメッセージを単一の「スレッド」で表示したいと考えています。
これが私の現在のデータベース構造といくつかのサンプルデータです: http://sqlfiddle.com/#!2/574e3/1/0
クエリを分解して段階的に作成しようとしましたが、混乱しています。これは、私が行った手順のリストです。
1. 2 人のユーザー間で送信されたメッセージのリストを取得する
SELECT * FROM uc_user_messages
WHERE uc_user_messages.user_id_1 = 1 OR uc_user_messages.user_id_2 = 1
2. 2 人のユーザー間の「会話」の最後のメッセージを表示する
SELECT * FROM uc_user_messages
WHERE uc_user_messages.user_id_1 = 1 OR uc_user_messages.user_id_2 = 1
ORDER BY timestamp DESC
3. 会話を user_id でグループ化します (明らかに、これは実稼働アプリケーションで多数の結合を持つユーザーの名前になります)。
SELECT * FROM uc_user_messages
WHERE uc_user_messages.user_id_1 = 1 OR uc_user_messages.user_id_2 = 1
GROUP BY uc_user_messages.user_id_1 AND uc_user_messages.user_id_2
ORDER BY timestamp DESC
そして、これが私が立ち往生している場所です...問題は、2人のユーザー間の会話で送信された最初のメッセージが、最新のメッセージではなく表示されることです: http://sqlfiddle.com/#!2/942fb/ 2
これについて何ができますか?データベースの設計に大きな変更を加える必要がないことを願っています。どんな助けでも大歓迎です。
乾杯、
ジョエル