Sql запрос, чтобы найти рейтинг? - PullRequest
0 голосов
/ 30 июня 2011

В моем приложении я храню отзывы пользователей в mysql.

Теперь мне нужно найти рейтинг, основанный на отзывах. Я храню отзывы типа «качество продуктов питания, обслуживание, атмосфера, ценность», все значения имеют значения от 1 до 5.

Как я могу найти рейтинг на основе этих значений.

Моя структура таблицы

ПитаниеКачество Сервис Атмосфера Стоимость РесторанId 1 3 2 4 1

Ответы [ 4 ]

1 голос
/ 30 июня 2011

Предполагая, что вам нужен рейтинг для идентификатора ресторана, и потому что вы не указали, что вы подразумеваете под рейтингом

SELECT RestaurantId
, SUM(FoodQuality+Service+Atmosphere+Value) rating1 -- the sum of total rating
, AVG(FoodQuality+Service+Atmosphere+Value) rating2 -- the average of total rating, max 20
, AVG((FoodQuality+Service+Atmosphere+Value)/4) rating3 -- the average of average rating, max 5
FROM table
GROUP BY RestaurantId
1 голос
/ 30 июня 2011

В SQL есть несколько наивных решений, но я бы порекомендовал вам прочитать эту статью: http://www.evanmiller.org/how-not-to-sort-by-average-rating.html и попытаться реализовать такой рейтинг где-нибудь прямо в вашем коде.

При этом наивным решением было бы сказать, что 4 и 5 положительны (например):

псевдокод:

myrating = (SELECT rating FROM reviews WHERE rating == 4 OR rating == 5) AS positivratings / (SELECT * FROM reviews) AS totalrating

0 голосов
/ 30 июня 2011

Точно вы должны предоставить нам данные таблицы, так как для каждого пользователя могут быть рейтинги, тогда вам нужно использовать группу по выражению и функцию mysql AVG (), чтобы найти рейтинг для пользователя.

0 голосов
/ 30 июня 2011

Дайте нам некоторую структуру таблиц. Вы можете использовать функцию [AVG()][1]. Для получения более подробной информации, пожалуйста, укажите структуру таблиц.

SELECT products.*, AVG(r.value) AS product_rating FROM products p LEFT JOIN ratings r ON p.id = r.product_id GROUP BY p.id

Учитывая, что products - это таблица, для которой у вас есть рейтинги, а ratings - это таблица, в которой вы держите оценки, ratings.value - это поле, содержащее значение присвоенного рейтинга.

...