gpt4 book ai didi

MySQL:检索与其关联的 x 个 user_ids 的 ID

转载 作者:行者123 更新时间:2023-11-29 16:45:04 28 4
gpt4 key购买 nike

提前非常感谢您的帮助。

我有一个类似于以下 DB Fiddle 的 MySQL 表:

https://www.db-fiddle.com/f/xa2Dt9cAPhiMfHcEv8Lifo/0

我需要做的是检索conversation_id,我可以在其中指定与其关联的user_id,并检索与这些user_ids 关联的conversation_id。

第一个例子:假设我想获取只有用户 1000001 和 1000002 与之关联的对话 ID。将提取的正确对话 ID 是 10。

第二个示例:假设我想获取只有用户 1000001、1000002 和 1000003 与其关联的对话 ID。将提取的正确对话 ID 是 20。

...等等。

另请注意,当只有一个 user_id 与对话 ID 关联时,这种情况就不会发生。

我在这里发布了我的第一个问题,但后来意识到我需要能够提取一个有 2 个或更多(最多 16 个)指定 user_id 与之关联的对话 ID:MySQL: Retrieving ID where exactly 2 rows share the same ID but have different userIDs

我收到的答案之一是,通过在 IN 子句中指定 user_ids,然后将用户总数放入 COUNT(DISTINCT user_id) 子句,它可以适用于 2 个或更多 user_id。然而,这似乎是最慢的答案性能,并且似乎仅当 user_id_2 键是可能的键(包含对话_id 和 user_id)时才在 EXPLAIN 中使用对话_id 键。

SELECT 
conversation_id
FROM assoc_user__conversation
GROUP BY conversation_id
HAVING
-- all the rows to exists only for 1000001 or 1000002 only
SUM(user_id IN (1000001, 1000002)) = COUNT(*) AND
-- number of unique user_id is 2
COUNT(DISTINCT user_id) = 2

非常感谢您的帮助!

最佳答案

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
( id SERIAL PRIMARY KEY
, user_id int NOT NULL
, conversation_id int NOT NULL
, UNIQUE(user_id,conversation_id)
, INDEX(conversation_id,user_id)
);

INSERT INTO my_table (id, user_id, conversation_id) VALUES
(1, 1, 10),
(2, 2, 10),
(3, 1, 20),
(4, 2, 20),
(5, 3, 20),
(6, 1, 30),
(7, 2, 30),
(8, 3, 30),
(9, 4, 30);

SELECT x.conversation_id
FROM my_table x
LEFT
JOIN my_table y
ON y.conversation_id = x.conversation_id
AND y.user_id NOT IN(1,2)
WHERE x.user_id IN (1,2)
AND y.id IS NULL
GROUP
BY x.conversation_id
HAVING COUNT(*) = 2;
+-----------------+
| conversation_id |
+-----------------+
| 10 |
+-----------------+

关于MySQL:检索与其关联的 x 个 user_ids 的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53141833/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com