Mysql 获取对帖子投票的用户
我有两张桌子Mysql 获取对帖子投票的用户,mysql,sql,Mysql,Sql,我有两张桌子 |posts| |votes| ---- ---- id id content post_id user_id voted 基本上,我要做的是检索数据库中的所有帖子,并使用一个额外的字段voted,该字段将显示用户是否对该帖子进行了投票 所以我想从帖子中提取内容,从投票中提取投票 假设当前用户具有id2。我尝试了(
|posts| |votes|
---- ----
id id
content post_id
user_id
voted
基本上,我要做的是检索数据库中的所有帖子,并使用一个额外的字段voted
,该字段将显示用户是否对该帖子进行了投票
所以我想从帖子中提取内容
,从投票中提取投票
假设当前用户具有id2
。我尝试了(伪SQL语法)
这适用于用户已经投票的帖子,并且在投票表中有一个匹配的记录,但是用户没有投票的帖子将不会显示,这很有意义,但不知道如何避免这种情况,我希望投票
在这种情况下为NULL
。有什么解决办法吗 通过检查WHERE
子句中的投票.user\u id
,可以有效地将您的联接转换为内部联接
您可以将其作为join上的一个子句移动,例如:
SELECT posts.content,
votes.voted
FROM posts
LEFT JOIN votes
ON posts.id = votes.post_id
AND votes.user_id = 2
通过检查WHERE
子句中的vows.user\u id
,可以有效地将您的联接转换为内部联接
您可以将其作为join上的一个子句移动,例如:
SELECT posts.content,
votes.voted
FROM posts
LEFT JOIN votes
ON posts.id = votes.post_id
AND votes.user_id = 2
您遇到的问题是,虽然您的join允许投票不存在,但您的where子句不存在
将查询更改为此,以便联接也依赖于用户
SELECT posts.content, votes.voted
FROM posts
LEFT JOIN votes ON posts.id = votes.post_id AND votes.user_id = 2
您遇到的问题是,虽然您的join允许投票不存在,但您的where子句不存在
将查询更改为此,以便联接也依赖于用户
SELECT posts.content, votes.voted
FROM posts
LEFT JOIN votes ON posts.id = votes.post_id AND votes.user_id = 2
将谓词vows.user_id=2
放入join子句,而不是WHERE
。目前,where子句有效地将左侧外部联接转换为内部联接,因为在没有投票权的任何行中,user\u id
将为NULL
,并且NULL=2
的计算结果为NULL
,因此该行被过滤掉。^^^右侧。将其置于WHERE
中可以有效地将左连接
转换为内部连接
。将谓词放入JOIN子句,而不是WHERE
。目前,where子句有效地将左侧外部联接转换为内部联接,因为在没有投票权的任何行中,user\u id
将为NULL
,并且NULL=2
的计算结果为NULL
,因此该行被过滤掉。^^^右侧。将其置于的位置
可以有效地将左连接
转换为内部连接
。