2014-01-14 2 views
0

У меня есть таблица для голосования под названием product_reviews с полем ENUM от 1 до 5 под названием rating.Как получить средний рейтинг и округлить до ближайшего 1?

Я хочу получить средний рейтинг от всех строк с помощью product_id 1665. Я использую систему оценки звезд, поэтому среднее значение не может быть с десятичными знаками. Должно быть число от 1 до 5.

Большое спасибо.

+1

Что вы уже пробовали? – kero

+0

Почему вы используете тип поля enum, а не тип поля int? –

+0

Я честно не знаю. Я просто волновался, что кто-то может попытаться опубликовать мою форму, используя число, отличное от 1 до 5. ENUM ограничивает это, я считаю. Но я новичок, поэтому я, возможно, не буду так поступать. – Mike

ответ

1
SELECT round(avg(rating)) as average_review, 
     count(rating) as number_of_reviews 
FROM product_reviews 
WHERE product_id = 1665 

Вы должны использовать round здесь с avg будет возвращать значение в диапазоне от 1,0 до 5,0, и если вы используете floor или ceil вы эффективно устраняющие 1 или 5 из возможных результатов, если всех отзывов на продукте есть та оценка.

Кроме того, вы будете отчуждать своих пользователей, если они смогут открыто увидеть продукт, получивший 50 отзывов с 1 звездой, и 1 отзыв с 2 звездами, и вы показываете средний балл в 2 звезды рядом с этим. Это сделает ваш сайт ненадежным, что обычно не очень хорошо для сайта, содержащего обзоры. По этой причине большинство звездных систем также могут показывать частичные звезды, чтобы сделать их более точными.

+0

Это было быстро. Спасибо! Прекрасно работает! Любая идея, как подсчитать количество обзоров, доступных для product_id? – Mike

+0

'ROUND()' округляется, если фракция меньше 0,5, используйте ['CEIL()'] (http://dev.mysql.com/doc/refman/5.0/en/mathematics-functions.html #function_ceil), чтобы всегда округлять. – Sammitch

+0

Спасибо, Сэммич. Да, я хочу округлить. – Mike

Смежные вопросы