我的网站上有类似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)”的函数检查视图以显示正确的关注/取消关注按钮,但我认为这样做会更好只需获取查询所需的所有信息。有谁知道这怎么可能?
答案 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