我希望在一个允许用户互相关注的系统中实现推特功能,如Twitter的“Who to Follow”。我用这样的表跟踪这些订阅:
CREATE TABLE `subscriptions` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`follower_id` int(10) unsigned NOT NULL,
`following_id` int(10) unsigned NOT NULL,
`enabled` tinyint(1) NOT NULL DEFAULT '0',
)
我正在尝试获取当前用户尚未关注的用户列表。
到目前为止,我已尝试使用以下查询:
SELECT DISTINCT u.id, u.name, s.follwer_id, s.enabled
FROM users u
LEFT JOIN subscriptions s ON u.id = s.follwer_id AND s.enabled = 0
WHERE u.id != 2
此查询最终会给我很多NULL和不相关的行。
提前致谢。
答案 0 :(得分:1)
在您的查询中,users
表指的是被关注的用户。您希望follower_id
设置为当前用户,following_id
匹配回用户(left join
):
SELECT u.id, u.name, s.follower_id, s.enabled
FROM users u LEFT JOIN
subscriptions s
ON u.id = s.following_id AND s.enabled = 0 and s.follower_id = 2
where s.following_id is null
请注意,最后两列始终为NULL
,因为您正在寻找没有匹配subscriptions
记录的用户。