У меня есть три таблицы, которые мне нужно использовать в поиске, в фильмах, обзорах и голосовании. Я хочу использовать функцию LIKE для Movie.Title и Review.Subject и заказывать их на количество голосов в каждом матче.
В таблице «Голоса» есть идентификатор ReviewID, UserID, IsGood. Каждый раз, когда пользователь голосует, вставка выполняется с помощью MovieID, UserID и 1 или 0 для IsGood, 1 означает, что значение 0 означает плохое.
Таким образом, один отзыв может иметь 0 хороших и плохих голосов, 5 хороших и 3 плохих и т. Д. Я хотел бы показать результаты в следующем порядке:
Обзор 1 – 10Good / 3Bad
Обзор 2 – 4Good / 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());
Вот более полный ответ. Чтобы получить сумму или хорошие голоса и плохие голоса из набора соединенных строк таблицы, вам необходимо сгруппировать похожие строки.
Ниже следует дать желаемый результат.
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());