[英]Sort by highest average rating
我有一个名为ranks
的表,该表存储1-7值,并将其与item
和user
ID连接。
像这样: id | userid | value | itemid
id | userid | value | itemid
id | userid | value | itemid
。
为了显示项目的等级,我计算了所有值的总和(1-7),其中itemid=?
并将其除以总行数。 但是我没有任何价值存储在items
表本身。
取得平均评分:
// total
$stmt = $conn->prepare("SELECT SUM(value) as total FROM ranks WHERE itemid=?");
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($total);
$stmt->fetch();
$stmt->close();
// num of rows
$stmt = $conn->prepare("SELECT COUNT(value) FROM ranks WHERE itemid=?");
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($count);
$stmt->fetch();
$stmt->close();
$avg = $total/$count;
但是我不知道如何按最高评分排序,除非我将评分存储在items
表本身中。 单独的ranks
表可以吗?
您可以使用avg()
按其最高评分检索itemid。 这与获取总和并除以计数相同:
select avg(value), itemid
from ranks
group by itemid
order by avg(value) desc
select itemid, total/cnt as avgrating
from
(
select itemid, sum(value) as total, count(*) as cnt
from ranks
group by itemid
) t
order by total/cnt desc;
您可以获取平均评分并使用子查询对其进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.