2012-01-18 44 views
1

我有三張我需要用於搜索,電影,評論和投票的表格。我想爲Movie.Title和Review.Subject使用LIKE函數,並按照每場比賽票數最多的順序排列它們。如何在JOIN和ORDER BY中使用LIKE進行mysql搜索投票表中大多數行/投票數?

在投票表中有一個ReviewID,UserID,IsGood。每次用戶投票時,都會使用MovieID,UserID和1或0對IsGood進行插入,1意味着好的0意味着不好。

所以一個審查可能具有0好的和壞的票,或5好的和差3,等我想顯示以下順序結果:

回顧1 - 10Good/3Bad

評分2 - 4Good/3Bad

評分3 - 0Good/0Bad

匹配頂級票數最高的票數最多,票數最差的票數最多。

這是MySQL查詢我寫了起來,顯然是錯誤的,但希望有人能幫助我:

mysql_query(" 
    SELECT m.Title, r.Subject, v.ReviewID FROM Movies m 
     LEFT JOIN Reviews r 
      ON m.ID=r.MovieID 
     INNER JOIN Votes v 
      ON r.ID=v.ReviewID 
     WHERE (m.Title LIKE '%" . $search . "%' 
      OR r.Subject LIKE '%" . $search . "%') 
     ORDER BY MAX(COUNT(v.IsGood='1')) LIMIT 10")or die(mysql_error()); 
+0

你需要做'm.Title,r.Subject,v.TipID'一組,或做選擇,計算獲得的投票數子。 – 2012-01-18 17:30:38

+0

Thx保羅爲您的迴應。你能告訴我一個例子嗎?也許是一個鏈接?我會搜索你剛纔的建議。 – SReca 2012-01-18 17:33:18

+0

嘗試在ORDER BY子句前添加'GROUP BY m.Title,r.Subject,v.TipID',那應該這樣做! – 2012-01-18 17:34:47

回答

4

這裏是一個更全面的答案。 要從一組連接的表格行中獲得總數或好的選票和錯誤的選票,您需要將類似的行組合在一起。

以下應該給你想要的結果。

mysql_query(" 
    SELECT m.Title, r.Subject, v.TipID, sum(v.IsGood) as IsGood, sum(v.isBad) as isBad FROM Movies m 
     LEFT 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, v.TipID 
     ORDER BY sum(v.IsGood) desc, sum(v.isBad) asc LIMIT 10")or die(mysql_error()); 
+0

我的sql查詢就像你在這裏顯示的那樣。但它返回0,現在我的問題是,如果我目前沒有投票,那會是問題嗎?我是否需要添加某種條件來檢查是否有先票? – SReca 2012-01-18 17:58:07

+0

我剛剛添加了一些投票,現在它完美。好吧,從這裏開始,我對於如何處理投票表現猶豫不決。我應該添加一些東西來檢查是否有先選票?人們會認爲沒有選票的比賽應該在列表的中間,因爲不好或不好,對吧? – SReca 2012-01-18 18:05:42

+0

您可能應該將投票中的INNER JOIN更改爲「LEFT JOIN」,即使沒有投票也會導致電影被退回 – 2012-01-19 09:32:33