3

我希望在允许用户相互关注的系统中实现类似 Twitter 的“关注谁”的建议功能。我使用如下表格跟踪这些订阅:

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 和不相关的行。

提前致谢。

4

1 回答 1

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

于 2013-08-08T00:48:16.917 回答