MYSQL数据库查询:建议用户关注

时间:2013-08-08 00:35:26

标签: mysql

我希望在一个允许用户互相关注的系统中实现推特功能,如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和不相关的行。

提前致谢。

1 个答案:

答案 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记录的用户。