0

user、、、conversationおよびconversation_participant行を持つ 3 つのテーブルがあります。

ユーザー
id

会話
id
type

会話参加者
conversation_id
user_id

( type「プライベート」な 1 対 1 の会話であることを示します。つまり、ユーザー 1 とユーザー 2 の会話が、ユーザー 1、ユーザー 2、ユーザー 3 などのグループ会話から切り離されていることを確認します。タイプ = 0 はプライベート、タイプ = 1グループです。)

いずれにせよ、2 人のユーザー (user_id=1 と user_id=2) の間のプライベートな会話が存在するかどうかを判断するクエリをどのように構築すればよいでしょうか? 私は次のようなことをしたいと思っています (私は SQL に非常に慣れていません)
SELECT conversation_participant.conversation_id FROM conversation_participant WHERE user_id=1

このように相互接続された複数のテーブルからのクエリを使用して、このような状況を管理する最も簡潔な方法は何ですか? 私はそれが比較的単純であると思います。あなたが知っているかもしれないこれに関する良い読み物があれば、それらも非常に高く評価されます.

ありがとうございました!

4

3 に答える 3

2

2 つの特定の既知のユーザー ID 間の会話を探していることを正しく理解している場合:

select c.id
from conversation_participant cp1
inner join conversation_participant cp2
    on cp1.conversation_id=cp2.conversation_id and cp2.user_id=2
inner join conversation c
    on cp1.conversation_id=c.id and c.type=0
where cp1.user_id=1;

英語で、次の会話の ID を見つけます。

user_id 1 は参加者です (from 句と where 句)

user_id 2 は同じ会話の参加者です (最初の結合句)

その会話はプライベート タイプです (2 番目の結合句)。

于 2013-01-24T07:01:56.220 に答える
1

例として言及したように、2 人のユーザー ID がわかっている場合は、次のことができます。

select count(DISTINCT c.id) from conversation c inner join (select * from conversation_participant cp where cp.user_id in (1,2)) cp on cp.conversation_id = c.id where c.type=0

これにより、2 人の会話の回数がわかります。

于 2013-01-24T06:54:27.367 に答える
0
SELECT *
FROM 
    conversation, 
    conversation_participant
WHERE conversation.id = conversation_participant.conversation_id
    AND conversation.type = 0

これにより、必要な結果が得られるはずです。phpMyAdmin を実行している場合は、[SQL] タブでテストして、出力を確認してください。

これは、プライベートな会話が発生した回数のみを表示します。「誰」がこれらの会話を行っているかを確認したい場合は、ユーザーを含めるために結合を長くする必要があります (より多くの列があると仮定しています単なる ID ではなく User テーブル)。

于 2013-01-24T06:40:21.423 に答える