0

我有三个表,, user,conversationconversation_participant行:

用户
id

对话
id
type

对话参与者
conversation_id
user_id

(type表示这是一个“私人”的 1-1 对话,即确保 user1 和 user2 的对话是从涉及例如 user1、user2 和 user3 的组对话中描绘出来的。type=0 是 private,type=1是一组。)

无论如何,我怎样才能最好地构造一个查询来确定两个用户(user_id=1 和 user_id=2)之间是否存在私人对话?我很想做这样的事情(我对 SQL 很陌生,请注意):
SELECT conversation_participant.conversation_id FROM conversation_participant WHERE user_id=1...但我很确定这是一个不幸的开始。

使用来自多个表的查询来管理这种情况的最简洁方法是什么,这些表都以这种方式互连?我认为它相对简单,如果您可能知道这方面的任何好读物,他们也将不胜感激。

谢谢!

4

3 回答 3

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 是同一对话的参与者(第一个加入子句)

并且该对话是私有类型的(第二个连接子句)。

于 2013-01-24T07:01:56.220 回答
1

如果您知道作为示例提到的两个人的用户 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

这将为您提供两个人之间的对话次数。

于 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)。

于 2013-01-24T06:40:21.423 回答