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

标签 php mysql

订阅

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/

相关文章:

php - MySQL 'select WHERE like x OR y' 一行有多个结果

php - 为什么我的 WP 插件适用于同一系统上的一个人而不适用于另一个人?

mysql - 加入 Mysql 查询给出错误的输出

验证表中是否已存在用户名和电子邮件时出现 PHP 错误

mysql - 通过类别返回属于某个部门的所有产品的 SQL 过程

mysql - 获取记录集上的第二个 Mysql 表列

php - 在 MYSQL/PHP 中,我如何从 ID 1 中删除并将数据插入到 ID 5

javascript - 尽管刷新,jQuery 格式仍不适用于 ajax 数据

PHP SOAP : Communication to a C++ application

php - Paypal返回值问题