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