Intereting Posts
PHP и Informix на Debian – как установить / настроить PDO безопасное место для хранения значений php для msql_connect? Лучший способ динамически планировать электронную почту напоминания? Что-нибудь лучше, чем cron? Интерфейс или абстрактный класс: какой из них использовать? Чувак, где мой php.ini? Как указать параметры TLS / SSL в Guzzle? Лучший способ присвоить переменной значение по умолчанию (имитировать Perl ||, || =) Штрих-код библиотеки CodeIgniter 2 + Zend 2 Самый эффективный с точки зрения памяти способ разделить куски переменной величины? PHP: как проверить, содержит ли строка запроса или POST-вары одинаковые переменные дважды Является ли оператор == транзитивным в PHP? Woocommerce: проверка пользовательских полей на странице редактирования учетной записи WooCommerce отображает имя продукта заказа в моей учетной записи Доктрина: запрос только там, где отношения не существуют? Как работать с массивом, возвращаемым с PHP-скрипта с помощью AJAX?

Как использовать LIKE для поиска mysql с помощью JOIN и ORDER По количеству большинства строк / голосов в таблице голосования?

У меня есть три таблицы, которые мне нужно использовать в поиске, в фильмах, обзорах и голосовании. Я хочу использовать функцию 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());