テーブル:
id sender receiver message
1 14 16 1st message from 14 to 16
2 16 14 1st message from 16 to 14
3 16 14 2nd message from 16 to 14
4 14 16 2nd message from 14 to 16
5 15 14 1st message from 15 to 14
6 15 14 2nd message from 15 to 14
7 14 16 3rd message from 14 to 16
8 14 16 4th message from 14 to 16
9 14 15 1st message from 14 to 15
10 14 15 2nd message from 14 to 15
ここで、私がここでやろうとしているのは、(受信者として) 1 人のユーザーのメッセージをグループ化することですが、問題は、メッセージの送信者に関係なく、最新のエントリが必要なことです。
試行 1:
SELECT c2. *
FROM (
SELECT max( id ) `id`
FROM tbl_msg
GROUP BY `sender`
)c1
INNER JOIN tbl_msg c2 ON c1.id = c2.id
WHERE `receiver` =14
GROUP BY `sender`
結果:
id sender receiver message
6 15 14 2nd message from 15 to 14
3 16 14 2nd message from 16 to 14
ここでの結果は、最後の各メッセージがユーザー 14 に送信されるということです。明らかに、ユーザー 14が送信したメッセージは含まれません。
繰り返しますが、 addtional GROUP BY
onは使用できません。これは、ユーザー 14によって送信されreceiver
た最後のエントリのみが含まれるためです。
期待される出力:
id sender receiver message
10 14 15 2nd message from 14 to 15
8 14 16 4th message from 14 to 16
上記でsender
は、両方のエントリで 14 ですが、任意のユーザーにすることができます。
簡単に言えば: ,
誰が言ったかに関係なく、A と B の間の会話の最後のメッセージを取得したいと考えています。
GROUP BY
ここで間違ったアプローチを使用していますか?
注: 以下の質問は、 1 つの基準のみを扱うという点を除いて、この質問と似ています。しかし、ここでは 2 つあります (つまり、ユーザーは送信者または受信者のいずれかになります)。これは私が立ち往生している部分です。