检查两个用户是否在同一个聊天中
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
我只需要在 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