Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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_Join - Fatal编程技术网

MySQL检查结果是否有利

MySQL检查结果是否有利,mysql,join,Mysql,Join,我有一个显示搜索结果的查询,我想再添加一个字段,检查每个结果是否在另一个表中显示为首选结果。为了保持简单,因为大多数搜索参数只添加了一些连接,并且在我的问题中不重要,我们考虑有一个结果< /代码>表,它具有所有正确的字段: id | title | description 以及“最喜爱的结果”表: userid | resultid 下面是获取结果的MySQL查询(为了简单起见,再次没有所有搜索标准): 我想要的是这样的东西(假设用户是#1): is_favorited为1(结果_favor

我有一个显示搜索结果的查询,我想再添加一个字段,检查每个结果是否在另一个表中显示为首选结果。为了保持简单,因为大多数搜索参数只添加了一些连接,并且在我的问题中不重要,我们考虑有一个<代码>结果< /代码>表,它具有所有正确的字段:

id | title | description
以及“最喜爱的结果”表:

userid | resultid
下面是获取结果的MySQL查询(为了简单起见,再次没有所有搜索标准):

我想要的是这样的东西(假设用户是#1):

is_favorited为1(结果_favorites中至少有一行的userid和resultid都与r.id和userid=1匹配)或0(没有)


我曾尝试使用您喜欢的
COUNT(rf.userid)
,但没有成功。欢迎任何帮助

我想您需要的是
左连接
,而不是
右连接
左联接将保留第一个表中的所有行。然后检查是否存在匹配项:

SELECT r.id r.title, r.description, (rf.resultid is not null) AS is_favourited
FROM results r LEFT JOIN
     result_favourite rf
     ON rf.resultid = r.id and
        rf.userid = 1;
试试这个:

SELECT r.id r.title, r.description, if(rf.userid is null,0,1) AS is_favourited
FROM results AS r
left JOIN result_favourites AS rf ON (rf.resultid = r.id)
WHERE userid = 1

太好了,行得通!我尝试了左和右,但区别在于将userid=1从WHERE移动到ON子句。出于某种原因,在where中使用它会返回0结果。谢谢-尽管我接受了Gordon的答案,因为它只在userid=1处于打开状态时有效,而不是在where(不确定为什么)
SELECT r.id r.title, r.description, (rf.resultid is not null) AS is_favourited
FROM results r LEFT JOIN
     result_favourite rf
     ON rf.resultid = r.id and
        rf.userid = 1;
SELECT r.id r.title, r.description, if(rf.userid is null,0,1) AS is_favourited
FROM results AS r
left JOIN result_favourites AS rf ON (rf.resultid = r.id)
WHERE userid = 1