2012-01-18 153 views
0

我有這個SQL搜索查詢的作品,但它只適用於投票表中存在投票。如何檢查MySQL搜索JOIN查詢時是否存在行?

mysql_query("SELECT m.Title, r.Subject, SUM(v.IsGood) AS Good, SUM(v.IsBad) AS Bad 
    FROM Movies m 
     JOIN Reviews r 
      ON m.ID=r.MovieID 
     JOIN Votes v 
     ON r.ID=v.ReviewID 
    WHERE (m.Title LIKE '%" . $search . "%' OR r.Subject LIKE '%" . $search . "%') 
     GROUP BY m.Title, r.Subject 
    ORDER BY SUM(v.IsGood) DESC, SUM(v.IsBad) ASC LIMIT 10") 

所以我把它改成了下面這個,所以不管是否有0票,它仍然應該顯示。但它不會產生任何結果,任何人都可以告訴我我做錯了什麼?

mysql_query("SELECT m.Title, r.Subject, COUNT(v.ReviewID) AS Rvotes, SUM(v.IsGood) AS Good, SUM(v.IsBad) AS Bad 
    FROM Movies m 
     JOIN Reviews r 
      ON m.ID=r.MovieID 
     JOIN Votes v 
     ON r.ID=v.ReviewID 
    WHERE (m.Title LIKE '%" . $search . "%' OR r.Subject LIKE '%" . $search . "%') 
     GROUP BY m.Title, r.Subject, v.ReviewID 
      HAVING Rvotes >= 0 
    ORDER BY SUM(v.IsGood) DESC, SUM(v.IsBad) ASC LIMIT 10") 

回答

1

假設你想要的結果,即使在票存在表,LEFT JOIN表中沒有票。

mysql_query("SELECT m.Title, r.Subject, SUM(v.IsGood) AS Good, SUM(v.IsBad) AS Bad 
    FROM Movies m 
     JOIN Reviews r 
      ON m.ID=r.MovieID 
     LEFT JOIN Votes v 
     ON r.ID=v.ReviewID 
    WHERE (m.Title LIKE '%" . $search . "%' OR r.Subject LIKE '%" . $search . "%') 
     GROUP BY m.Title, r.Subject 
    ORDER BY SUM(v.IsGood) DESC, SUM(v.IsBad) ASC LIMIT 10") 

注:我修改你的初始查詢(而不是第二個)如你所說它仍然沒有提供你想要的。

+0

這有效,但現在我只得到一個結果。我有一個電影和兩個評論,如果我在搜索中輸入電影的名稱,只有其中一個評論出現,而不是兩個。我希望所有的比賽都能出現。我需要改變什麼?謝謝btw。 – SReca

+0

我認爲你的查詢做得太多了。你可能想要備份和改進你的問題。 –

+0

好吧,這是我原來的問題的擴展張貼在這裏:http://stackoverflow.com/questions/8914475/how-to-use-like-for-mysql-search-with-join-and-order-by-the- count-of-most-rows-v/8914664#8914664在這裏你會看到我的原始請求。 – SReca