使用sql获取网站关注者

时间:2012-01-22 19:21:30

标签: php sql

我有3张桌子:

用户

  

ID
  用户名

图片

  

ID
    USER_ID
  图像

user_follow

  

ID
  USER_ID
  follow_id

我试图让所有用户关注者(朋友)使用表用户的“用户名”和表“图片”中的“图片”

我的查询是:

"SELECT
u.username,
i.image
FROM users u, user_follow f, images i
WHERE f.user_id = 3 AND f.follow_id = u.id AND f.follow_id = i.user_id";

此查询仅在有图像时才返回关注者,如果没有,则返回任何内容。 我尝试执行查询以返回所有关注者,如果是具有此类的图像(images.user_id = user_follow.follow_id),则返回图像,如果用户在图像表中没有图像则返回空数组

是否可以获得

[0] => Array
(
    [username] => 6666
    [image] => 
)
[1] => Array
(
    [username] => 3333
    [image] => my.jpg
)
[2] => Array
(
    [username] => 2222
    [image] =>
) 

3 个答案:

答案 0 :(得分:1)

您将需要使用左外连接来处理'即使图像为空'条件。以下内容应该有所帮助:

SELECT
    u.username
  , i.image
FROM
  users u
  -- normal join of users and user_follow
  INNER JOIN user_follow f on (u.id = f.follow_id)
  -- include images if they exist, null otherwise
  LEFT OUTER JOIN images i on (f.follow_id = i.user_id)
WHERE
  f.user_id = 3
;

答案 1 :(得分:1)

您可以使用LEFT JOIN用户和图像表来获取具有图像的所有用户 尝试下面的代码,

select * from users u
  left outer join images i on u.id = i.user_id 
  left join user_follow f on f.follow_id = u.id
where  f.userid = 3

答案 2 :(得分:0)

虽然我不是100%确定我完全理解你想要的东西,但我理解你想要的方式是left join

你有没有试过像:

SELECT u.username, i.image
FROM users u
LEFT JOIN images i
ON u.id= i.user_id