从相同字段中选择数据但在两个不同的行中,然后输出到一行

时间:2013-09-10 03:19:32

标签: mysql sql

我有一个跟随表,其中包含跟随者和一个代表用户表中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

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

2 个答案:

答案 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