mysql - 查找一个或多个用户之间的对话

标签 mysql sql

我在查找给定 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/

相关文章:

MySQL - 游标在存储过程中不起作用

SELECT 之后加入 Mysql

MySQL:无法创建表 './myhairdev/catalog_product_index_website.frm'(错误号:150)

mysql - 上传.sql 500错误

mysql - 如何通过从另一个表加入来更新 mysql 中的列?

python - 如何使用 peewee db_url.connect() 生成带有 RetryOperationalError 的连接?

php - 如何在mysql数据库中存储时间?

java - 约会应用程序 - AngularJS 可用性选择

php - MYSQL表有静态值和动态值

android - 查询 "cont"列上最大值的行