gpt4 book ai didi

mysql - 使用按位操作数在 MySQL 表中查找共享列表 ID

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:21 24 4
gpt4 key购买 nike

我想从用户表的“following_list”列中找到共同的项目:

+----+--------------------+-------------------------------------+
| id | name | following_list |
+----+--------------------+-------------------------------------+
| 9 | User 1 | 26,6,12,10,21,24,19,16 |
| 10 | User 2 | 21,24 |
| 12 | User 3 | 9,20,21,26,30 |
| 16 | User 4 | 6,52,9,10 |
| 19 | User 5 | 9,10,6,24 |
| 21 | User 6 | 9,10,6,12 |
| 24 | User 7 | 9,10,6 |
| 46 | User 8 | 45 |
| 52 | User 9 | 10,12,16,21,19,20,18,17,23,25,24,22 |
+----+--------------------+-------------------------------------+

我希望能够根据给定用户 ID 的匹配数量进行排序。例如,我想将除 #9 之外的所有用户与 #9 进行匹配,以查看他们在“following_list”列中的哪些 ID 是相同的。

我找到了一种通过“SET”数据类型和一些小技巧来做到这一点的方法:
http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html#bits

但是,我需要对任意 ID 列表执行此操作。我希望这可以完全通过数据库来完成,但这有点超出我的能力范围。


编辑:感谢大家的帮助。我仍然很好奇基​​于位的方法是否可行,但 3 表连接工作得很好。

SELECT a.following_id, COUNT( c.following_id ) AS matches
FROM following a
LEFT JOIN following b ON b.user_id = a.following_id
LEFT JOIN following c ON c.user_id = a.user_id
AND c.following_id = b.following_id
WHERE a.user_id = ?
GROUP BY a.following_id

现在我必须不断说服自己不要过早优化。

最佳答案

如果您将 following_list 列标准化为包含 user_id 和 follower_id 的单独表,那么您会发现 COUNT() 非常易于使用。您还会发现选择关注者列表或被关注用户列表的逻辑要容易得多

关于mysql - 使用按位操作数在 MySQL 表中查找共享列表 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2991271/

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