SQL-запрос - как получить элемент с наивысшим рейтингом? - PullRequest
1 голос
/ 24 февраля 2012

У меня есть две таблицы sql:

item
id  name   price
1   name1  100
2   name2  100
3   name3  100
4   name4  100

rates
id item_id rating
1  1       5
2  4       4
3  2       5
4  2       3
5  3       1
...

И я хочу показать 3 элемента с наивысшим средним рейтингом.Как мне это сделать?

Я получаю средний рейтинг предметов, как это:

$item =  mysql_query("SELECT * FROM item");
while($row = mysql_fetch_assoc($item)) {
    $id = $row['id'];
    $rate= mysql_query("SELECT AVG(rating) FROM rates WHERE id= $id");
}

Ответы [ 2 ]

4 голосов
/ 24 февраля 2012

Вы можете вычислить самые высокие средние значения в производной таблице и присоединиться к ней:

select i.id, i.name, i.price
from item i
join (
    select id, avg(rating) as ar
    from rates
    group by id
    order by ar desc, id
    limit 3
) dt on i.id = dt.id;

Я добавил id в ORDER BY, чтобы получить согласованные результаты в случаях, когда у вас есть дубликаты.

1 голос
/ 24 февраля 2012
$item =  mysql_query("SELECT i.*, (SELECT AVG(`rating`) FROM `rates` WHERE `item_id` = i.`id`) AS `rating` FROM `item` i ORDER BY `rating` DESC LIMIT 3");

Вы пытались запустить такой подзапрос?Я не думаю, что это был бы самый эффективный или точный способ сделать это, но он может дать базовый результат, который вы можете найти полезным.

В идеале вы должны обработать это на бэкэнде, чтобы исключить игрыстандартное отклонение) и сохраняйте постоянное среднее значение для каждого элемента, но это может быть слишком сложным для того, что вам может понадобиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...