检查两个用户是否在同一个聊天中

Check if two users in the same chat

我只需要在 2 个不同的用户 ID 匹配并将 'chats_idchats' 与 'idchats' 匹配时才能获取 使用的查询:

SELECT *
  FROM chats_has_usuarios chu
 INNER JOIN chats c
    ON c.idchats = chu.chats_idchats
 WHERE chu.chats_idchats = c.idchats
   AND chu.usuarios_idusuarios = 1
    OR chu.usuarios_idusuarios = 2
chats_idchats usuarios_idusuarios idchats fecha
8 1 8 2020-12-15
8 2 8 2020-12-15
9 2 9 2020-12-15

我想得到

chats_idchats usuarios_idusuarios idchats fecha
8 1 8 2020-12-15
8 2 8 2020-12-15

尝试:

SELECT * FROM chats_has_usuarios chu
DISTINCT chu.usuarios_idusuarios
INNER JOIN chats c ON c.idchats = chu.chats_idchats
WHERE chu.chats_idchats = c.idchats
AND chu.usuarios_idusuarios = 1
OR chu.usuarios_idusuarios = 2

如果您想与任何 ID 一起使用:

SELECT * FROM chats_has_usuarios chu
DISTINCT chu.usuarios_idusuarios
INNER JOIN chats c ON c.idchats = chu.chats_idchats
WHERE chu.chats_idchats = c.idchats

你可以用这个

select * from (SELECT * FROM chats_has_usuarios chu
INNER JOIN chats c ON c.idchats = chu.chats_idchats
WHERE chu.chats_idchats = c.idchats
AND chu.usuarios_idusuarios = 1
OR chu.usuarios_idusuarios = 2) t1
,

(SELECT * FROM chats_has_usuarios chu
INNER JOIN chats c ON c.idchats = chu.chats_idchats
WHERE chu.chats_idchats = c.idchats
AND chu.usuarios_idusuarios = 1
OR chu.usuarios_idusuarios = 2) t2

where t1.usuarios_idusuarios < t2.usuarios_idusuarios and
and t1.chats_idchats=t2.chats_idchats

你是这个意思吗:

SELECT * FROM chats_has_usuarios chu
INNER JOIN chats c ON c.idchats = chu.chats_idchats
WHERE chu.chats_idchats = c.idchats
AND exists(select 1 from chats_has_usuarios abc 
where chu.chats_idchats = abc.chats_idchats 
and chu.usuarios_idusuarios <> abc.usuarios_idusuarios)

基于 usuarios_idusuarios 的是用户 ID

您可以使用 exists:

select chu.*, c.fecha
from chats_has_usuarios chu
inner join chats c on c.idchat = chu.chats_has_usuarios 
where 
    usuarios_idusuarios in (1, 2)
    and exists (
        select 1
        from chats_has_usuarios chu1
        where 
            chu1.usuarios_idusuarios in (1, 2) 
            and chu1.chats_idchats = chu.chats_idchats
            and chu1.usuarios_idusuarios <> chu.usuarios_idusuarios
    )

假设同一个用户不会在同一个聊天中出现两次,另一种选择是window功能,如果你是运行 MySQL 8.0或更高版本:

select chu.*, c.fecha
from (
    select chu.*, count(*) over(partition by chats_idchats) cnt
    from chats_has_usuarios chu
    where usuarios_idusuarios in (1, 2) 
) chu
inner join chats c on c.idchat = chu.chats_has_usuarios 
where chu.cnt > 1