我的关注者表如下所示:
| id | follower_id | user_id |
| 1 | user1 | user2 |
| 2 | user2 | user3 |
| 3 | user2 | user1 |
| 4 | user4 | user3 |
| 5 | user3 | user2 |
我需要统计两个用户互相关注的实例,在这种情况下结果应该是 2,因为 user1 和 user2、user2 和 user3 互相关注。
我尝试了 LEFT JOIN、SELECT COUNT() FROM table WHERE field IN() 的各种组合,但我认为我错过了一些东西......我觉得我已经接近这个查询的目标
SELECT
u.id,
u.name,
u.img,
ifnull((follower_id and user_id),0) as `match`
FROM table_users u
LEFT JOIN (select user_id from table_followers where follower_id = 14) followers on u.id = followers.user_id
LEFT JOIN (select follower_id from table_followers where user_id = 14) following on u.id = following.follower_id
WHERE u.id = 14 and (follower_id or user_id)
通过此查询,我试图找出 user_id_14 有多少关注者。
是否可以使用纯 MySQL 来实现此目的,或者我应该使用 PHP 循环来解决此问题?
这让我头疼了三个小时,而且找不到解决办法。
最佳答案
SELECT
CONVERT(COUNT(*)/2, UNSIGNED) as counter
FROM followers u
INNER JOIN (
select
user_id,
follower_id
from followers
) as f
on u.user_id = f.follower_id
WHERE u.follower_id = f.user_id
关于MySQL:交叉匹配来自两个不同列的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28883377/