MySQL:交叉匹配来自两个不同列的记录

标签 mysql sql

我的关注者表如下所示:

| 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/

相关文章:

mysql - 如何删除表中的记录以便每分钟有一个读数?

if 语句中的 PHP 数据库连接

mysql - SQL 比较行并显示同一表中列的差异

mysql - 计算后将数据从一个表插入到另一个表的过程

sql - 在 Redshift 上创建 Apriori 项集

MySQL 查询以检索在多对多关系中具有完全匹配的项

php - MYSQL/PHP 基于另一个表中的文本片段的联接

sql - 从多列查询

mysql - 选择哪个数据库来查找最佳匹配记录?

mysql - 在 SQL 树结构中查找节点