表订阅
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是共同的 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/