2014-03-26 124 views
0

我有一个显示搜索结果的查询,我想添加一个字段来检查每个结果是否显示为另一个表中的最佳结果。为了保持它的简单,因为大多数搜索参数的只添加一些JOIN和WHERE并没有我的问题很重要,让我们考虑不存在具有所有正确的字段results表:MySQL检查结果是否被收录

id | title | description 

而且result_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(有与两个用户ID result_favourites至少一行和resultid匹配r.id和用户ID = 1)或0(没有)。

我试过使用COUNT(rf.userid) AS is_favourited但没有奏效。欢迎任何帮助!

回答

0

我想你想left join,而不是right join。 A 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; 
+0

完美,这作品!我曾尝试过左和右,但是造成差异的原因是将userid = 1从WHERE移动到ON子句。出于某种原因在其中返回0结果的地方使用它。 – Davor

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 
+0

谢谢 - 尽管我已经接受了戈登的答案,因为它仅在userid = 1处于ON状态时才起作用,而不是WHERE(不知道为什么) – Davor