2012-01-18 95 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