2014-03-26 57 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