gpt4 book ai didi

php - 当条件取决于一个表中的某些列时如何查找相交行

转载 作者:行者123 更新时间:2023-11-29 02:25:02 25 4
gpt4 key购买 nike

表格订阅

subscriber | subscribeto (columns)
1 | 5
1 | 6
1 | 7
1 | 8
1 | 9
1 | 10
2 | 5
2 | 6
2 | 7

有两个用户的 ID 为 1 和 2。他们订阅了不同的用户,我将这些数据插入表 subscribesubscriber 列表示谁是订阅者,subscribeto 列表示他们订阅了谁。从上表可以得出;
用户id=1订阅了6个用户
用户id=2订阅了3个用户

我想找到订阅的共同点(比如 Facebook 是共同的 friend )
用户1订阅用户5,6,7,8,9,10
用户2订阅用户5,6,7
所以,用户1和2的相互订阅是:5,6,7

我正在尝试创建 SQL 语句..
我为我的 SQL 语句提供了 user 表,我认为我们只能使用 subscribe 表,但我想不通。

用户

userid  (columns)
1
2
3
...
...

SQL

"select * from user where (select count( 1 ) from subscribe where subscriber = '1' and subscribeto = user.userid) and (select count( 1 ) from subscribe where subscriber = '2' and subscribeto = user.userid);"

此 SQL 可以正常运行,但对于数千列来说速度非常慢。请为我提供更好的 SQL,谢谢。

最佳答案

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(subscriber INT NOT NULL
,subscribeto INT NOT NULL
,PRIMARY KEY(subscriber,subscribeto)
);

INSERT INTO my_table VALUES
(1,5),
(1,6),
(1,7),
(1,8),
(1,9),
(1,10),
(2,5),
(2,6),
(2,7);

SELECT x.subscribeto mutual_friends
FROM my_table x
JOIN my_table y
ON y.subscribeto = x.subscribeto
WHERE x.subscriber = 1
AND y.subscriber = 2;
+----------------+
| mutual_friends |
+----------------+
| 5 |
| 6 |
| 7 |
+----------------+

关于php - 当条件取决于一个表中的某些列时如何查找相交行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23974613/

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