Как использовать LIKE для поиска MySQL с JOIN и ORDER BY подсчетом большинства строк / голосов в таблице голосования? - PullRequest
1 голос
/ 18 января 2012

У меня есть три таблицы, которые мне нужно использовать для поиска, фильмов, обзоров и голосов.Я хочу использовать функцию LIKE для Movie.Title и Review.Subject и упорядочить их по количеству голосов, полученных за каждое совпадение.

В таблице голосов есть ReviewID, UserID, IsGood.Каждый раз, когда пользователь голосует, делается вставка с MovieID, UserID и 1 или 0 для IsGood, 1 означает хороший 0 означает плохой.

Таким образом, один отзыв может иметь 0 хороших и плохих голосов, или 5хорошо и 3 плохо, и т. д. Я хотел бы показать результаты в следующем порядке:

Отзыв 1 - 10Хорошо / 3Bad

Обзор 2 - 4Хорошо/ 3Bad

Обзор 3 - 0Хорошо / 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());

1 Ответ

4 голосов
/ 18 января 2012

Вот более полный ответ.Чтобы получить сумму или хорошие голоса и плохие голоса из набора строк объединенной таблицы, необходимо сгруппировать одинаковые строки.

Ниже должно дать вам желаемый результат.

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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...