3

我有一个关注表,其中包含关注者和代表用户表中 user_id 的关注者字段。用户表有用户的名字,称为 full_name。我想创建一个查询,当关注者发帖时,将更新从发布表推送到所有关注者。结果看起来像这样:

关注者的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

它进行了正确的查询,但我无法填充关注者名称。它只是复制了followee。关于如何编写选择字段的任何想法?

4

2 回答 2

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这里没有任何意义,所以我已经删除了它。

于 2013-09-10T03:29:20.157 回答
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
于 2013-09-10T03:31:34.650 回答