如何构造此SQL查询?

时间:2013-01-24 06:30:57

标签: mysql sql

我有三个表,userconversationconversation_participant包含行:

用户
id

对话
id {
{1}}

conversation_participant
type {
{1}}

conversation_id表示它是“私有”1-1对话,即确保从涉及例如user1,user2和user3的群组对话中描绘user1和user2的对话。 = 0是私有的,type = 1是一个组。)

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

使用以这种方式互连的多个表的查询来管理这种情况的最简洁方法是什么?我认为它相对简单,如果您对此有任何好的读数,那么他们也会非常感激。

谢谢!

3 个答案:

答案 0 :(得分: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是同一对话(第一个连接子句)的参与者

并且该会话属于私有类型(第二个连接子句)。

答案 1 :(得分: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

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

答案 2 :(得分:0)

SELECT *
FROM 
    conversation, 
    conversation_participant
WHERE conversation.id = conversation_participant.conversation_id
    AND conversation.type = 0

这可以为您提供所需的结果。如果您正在运行phpMyAdmin,请在SQL选项卡中对其进行测试并查看它输出的内容。

这只会显示私人会话发生的次数,如果您想看到“谁”正在进行这些会话,您需要延长联接以包含用户(我假设您已经拥有用户表中的更多列而不仅仅是ID。