Mysql:显示用户关注的所有用户,如果我也关注该用户,则添加动态列

时间:2016-03-08 14:50:59

标签: mysql

我的网站上有类似Twitter的关注系统。 我有一个mySQL表“追随者”,像这样:

'followers' TABLE STRUCTURE:

| user_id    | follow_id |
--------------------------
| 1          | 2         |
| 1          | 3         |
| 2          | 3         |
| 2          | 4         |

现在我希望列出所有列出的用户f.e.用户2正在关注(所以3和4)但我还想显示当前用户是否在用户之后 登录(让我们假设用户1)。应将此信息动态添加到新列“ifollow”,如下所示:

Expected result when checking which users "user 2" is following:

| user_id    | follow_id | ifollow    |
---------------------------------------
| 2          | 3         | true       |
| 2          | 4         | false      |

现在我只是获取用户关注的所有用户,然后使用类似“doIFollow($ id)”的函数检查视图以显示正确的关注/取消关注按钮,但我认为这样做会更好只需获取查询所需的所有信息。有谁知道这怎么可能?

1 个答案:

答案 0 :(得分:1)

您可以使用相关的子查询:

SELECT user_id, follow_id,  
       COALESCE((SELECT true       
                 FROM followers AS f2
                 WHERE f2.follow_id = f1.follow_id AND 
                       f2.user_id = 1), false)
FROM followers AS f1
WHERE user_id = 2

修改:(功劳归于@Mjh)

使用简单的LEFT JOIN操作也可以完成同样的事情:

SELECT f1.user_id, f1.follow_id,  
       IF(f2.user_id IS NULL, false, true) AS ifollow
FROM followers AS f1
LEFT JOIN followers AS f2 
   ON f1.follow_id = f2.follow_id AND f2.user_id = 1
WHERE f1.user_id = 2