私はこの3つのテーブルを持っています:
messages:
id conv snd text created
1 1 1 asdasd 2012-12-15 23:10:53
3 1 1 zzz 2013-01-18 12:37:44
4 1 1 ssss 2013-01-18 12:42:01
msg_status
id msg user status
1 1 1 mine
2 1 4 unread
3 3 1 mine
4 3 4 unread
5 4 1 mine
6 4 4 unread
conv_users
conv user
1 1
1 4
2 1
2 4
2 5
これは私のサイトのメッセージング システムです。会話の最後のメッセージですべてのユーザーの会話を取得することを想定しているこの小さなクエリを除いて、すべての準備ができています。
つまり、ユーザー A に 2 つの会話があり、conv1 には 10 件のメッセージがあり、conv2 には 2 件のメッセージしかない場合、convId、messageId、messageText、messageDate などの 2 つの行を取得します。
しかし問題は、そのメッセージが各会話の最後のメッセージであることです。
これは私が行ったクエリですが、うまくいきません!
SELECT
cu.conv,
msg.snd,
msg.text,
mst.status,
msg.created
FROM conv_users AS cu
INNER JOIN messages AS msg
ON cu.conv = msg.conv
INNER JOIN msg_status AS mst
ON msg.id = mst.msg
WHERE cu.user = 4
AND mst.user = 4
ORDER BY msg.created DESC
追加するGROUP BY cu.conv
と、必要に応じて最後のメッセージではなく最初のメッセージが表示されます。