表订阅
subscriber | subscribeto (columns)
1 | 5
1 | 6
1 | 7
1 | 8
1 | 9
1 | 10
2 | 5
2 | 6
2 | 7
有两个用户拥有ID 1和2.他们订阅了各种用户,我将这些数据插入表订阅。列订阅者表示谁是订阅者,列订阅表示他们订阅了谁。从上表可以得出结论;
用户id = 1订阅了6个用户
用户ID = 2订阅了3个用户
我想找到相互认购(比如Facebook是共同的朋友)
用户1订阅用户5,6,7,8,9,10
用户2订阅用户5,6,7
因此,用户1和2的相互订阅是:5,6,7
我正在尝试创建SQL语句。
我为您的SQL语句提供了用户表,我认为我们只能使用 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,谢谢。
答案 0 :(得分:2)
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 |
+----------------+