我有一个显示搜索结果的查询,我想再添加一个字段,检查每个结果是否在另一个表中显示为优惠结果。为了简单起见,因为大多数搜索参数只添加了一些JOIN和WHERE并且对我的问题不重要,所以让我们考虑一个results
表具有所有正确的字段:
id | title | description
结果_favourites表:
userid | resultid
以下是获取结果的MySQL查询(为简单起见,再次没有所有搜索标准):
SELECT id, title, description FROM results
我想要的是这样的东西(让我们说用户是#1):
SELECT r.id r.title, r.description, (something here) AS is_favourited
FROM results AS r
RIGHT JOIN result_favourites AS rf ON rf.resultid = r.id
WHERE userid = 1
is_favourited为1(result_favourites中至少有一行,其中userid和resultid匹配r.id,userid = 1)或0(没有)。
我已尝试使用COUNT(rf.userid) AS is_favourited
,但这并不奏效。欢迎任何帮助!
答案 0 :(得分:0)
我想你想要一个left join
,而不是right join
。 left join
保留第一个表中的所有行。然后检查是否匹配:
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;
答案 1 :(得分:0)
试试这个:
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