我在查找给定 user_id 之间的对话时遇到问题。
SQL 表:
+-------------------+
| conversation_user |
+-------------------+
| conversation_id |
| user_id |
+-------------------+
我试过了
SELECT `conversation_id` FROM `conversation_user` WHERE `user_id` IN (X, Y) HAVING COUNT(*) = N
但它不能正常工作。知道如何选择正确的 conversation_id 吗?对话可以在一个或多个用户之间进行。
编辑:
+-----------------+---------+
| conversation_id | user_id |
+-----------------+---------+
| 1 | 1 |
| 1 | 2 |
+-----------------+---------+
| 2 | 1 |
| 2 | 3 |
+-----------------+---------+
| 3 | 1 |
+-----------------+---------+
| 4 | 1 |
| 4 | 2 |
| 4 | 3 |
+-----------------+---------+
假设我想获取用户 1 和 2 之间的对话。结果必须是 1,而不是 1 and 4 或 4。
最佳答案
我觉得你缺GROUP BY
子句
<罢工>罢工>
<罢工>SELECT `conversation_id`
FROM `conversation_user`
WHERE `user_id` IN (X, Y)
GROUP BY conversation_id
HAVING COUNT(DISTINCT user_id) = N
罢工><罢工>罢工>
或
SELECT `conversation_id`
FROM `conversation_user` a
WHERE `user_id` IN (X, Y)
GROUP BY conversation_id
HAVING COUNT(DISTINCT user_id) =
(
SELECT COUNT(DISTINCT userid)
FROM `conversation_user` b
WHERE b.`conversation_id` = a.`conversation_id`
GROUP BY b.`conversation_id`
)
SQLFiddle Demo
关于mysql - 查找一个或多个用户之间的对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917540/