我有一个跟随表,其中包含跟随者和一个代表用户表中user_id的followee字段。用户表具有用户的名称,称为full_name。我想创建一个查询,当关注者发帖时,将更新从帖子表推送到所有关注者。结果看起来像这样:
followee的user.full_name,关注者的user.fullname,关注者的更新。
我的代码是:
SELECT user.user_id, user.user_id, post.update
FROM follow
JOIN post ON post.user_id = follow.follower_user_id
JOIN user ON user.user_id = follow.followee_user_id
Where update.date > DATE_SUB(CURDATE(),INTERVAL 0 DAY)
GROUP BY follow.followee_user_id
它执行正确的查询,但我无法填充关注者名称。它只是重复了跟随者。关于如何编写选择字段的任何想法?
答案 0 :(得分:1)
user
表上需要两个连接 - 一个用于关注者,另一个用于关注者:
SELECT followee_user.full_name AS followee_name,
follower_user.full_name AS follower_name,
post.update
FROM follow
INNER JOIN user AS followee_user
ON follow.followee_user_id = followee_user.user_id
INNER JOIN user AS follower_user
ON follow.follower_user_id = follower_user.user_id
INNER JOIN post ON follow.followee_user_id = post.user_id
WHERE post.update > DATE_SUB(CURDATE(), INTERVAL 0 DAY)
请注意,必须为已加入的user
表的每个实例提供别名,以消除两者的歧义。在这种情况下,我使用了“followee_user
”和“follower_user
”。
我不确定update.date
是什么,所以我认为这是一个错字,你的意思是update
;必要时改变这一点。此外GROUP BY
在这里没有任何意义,所以我删除了它。
答案 1 :(得分:0)
你需要加入用户表两次次,一次是关注者角色,一次是关注者角色......这样的事情:
SELECT e.full_name AS followee_full_name
, r.full_name AS follower_full_name
, p.update
FROM follow f
JOIN post p ON p.user_id = f.follower_user_id
JOIN user r ON r.user_id = f.follower_user_id
JOIN user e ON e.user_id = f.followee_user_id
WHERE p.update_date > CURDATE() + INTERVAL 0 DAY