0

このSQL検索クエリは機能しますが、投票が投票テーブルに存在する場合にのみ機能します。

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")
4

1 に答える 1

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")

注:最初のクエリ(2番目ではない)を変更しましたが、それでも必要なものが提供されていないとのことです。

于 2012-01-18T20:31:14.323 に答える