我有两张桌子
|posts| |votes|
---- ----
id id
content post_id
user_id
voted
基本上,我要做的是检索数据库中的所有帖子,并使用额外的字段voted
来显示用户是否对该帖子进行了投票。
所以我想从content
和posts
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
。这有什么解决方法吗?
答案 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