获得投票的用户

时间:2015-07-09 15:08:21

标签: mysql sql

我有两张桌子

|posts|          |votes|
 ----              ----
id                id
content           post_id
                  user_id
                  voted

基本上,我要做的是检索数据库中的所有帖子,并使用额外的字段voted来显示用户是否对该帖子进行了投票。

所以我想从contentposts voted中提取votes

假设当前用户的标识为2。我试着做一些像(伪SQL语法)

的东西
SELECT 
  posts.content,
  votes.voted
FROM 
  posts
  LEFT JOIN votes ON posts.id = votes.post_id
WHERE votes.user_id = 2

这适用于用户已经投票的帖子,并且在投票表中有匹配的记录,但是帖子用户没有投票,但未显示有道理,但不知道如何规避这一点,我希望voted在这种情况下是NULL。这有什么解决方法吗?

2 个答案:

答案 0 :(得分:4)

通过检查votes.user_id子句中的WHERE,您有效地将您的联接变为INNER JOIN

您可以将其作为连接上的子句移动,例如:

SELECT      posts.content, 
            votes.voted 

FROM        posts 

LEFT JOIN   votes 
    ON      posts.id = votes.post_id 
    AND     votes.user_id = 2

答案 1 :(得分:1)

您遇到的问题是,虽然您的加入允许投票不存在,但您的where子句却没有。

将您的查询更改为此,以便连接也取决于用户。

SELECT posts.content, votes.voted 
FROM posts 
LEFT JOIN votes ON posts.id = votes.post_id AND votes.user_id = 2