Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取对帖子投票的用户_Mysql_Sql - Fatal编程技术网

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
,该字段将显示用户是否对该帖子进行了投票

所以我想从
帖子中提取
内容
,从
投票中提取
投票

假设当前用户具有id
2
。我尝试了(伪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
,因此该行被过滤掉。^^^右侧。将其置于
位置
可以有效地将
左连接
转换为
内部连接