php - 最佳平均评分
问题描述
我为新闻文章创建了一个简单的评级系统。新闻文章存储在称为“文章”的数据库表中。每篇文章都有一个唯一的 id,从 1 开始。
所以我有2篇文章,ID 1和ID 2。
我还有一个名为“ratings”的表,其中包含用户的唯一 ID、文章 ID 和用户给出的评分。
如果我给 ID 2 的文章 5/5 星评级,它会进入“评级”表,文章 ID 为 2,我的用户 ID 和评级为 5。
我已经弄清楚如何显示每篇文章的平均评分,但我想知道如何按降序显示文章的最佳平均评分。这有可能吗?怎么可能做到这一点?
这是我找到平均值的方法:
<?
$votesForThis = 0;
$sql = "SELECT * FROM ratings WHERE articleID = ".$articleID." ORDER BY id ASC";
// Check if there are results
if ($result = mysqli_query($con, $sql)) {
// Loop through each row in the result set
while($row = mysqli_fetch_assoc($result)) {
$votesForThis++;
}
}
$result = mysqli_query($con, 'SELECT SUM(vote) AS vote_sum FROM ratings WHERE articleID=' . $articleID);
$row = mysqli_fetch_assoc($result);
$voteSum = $row['vote_sum'];
$averageVotes = $voteSum / $votesForThis;
?>
解决方案
MySQL 有一个avg
你可以使用的函数,而不是你自己实现这个逻辑。从那里开始,只需按文章 ID 分组并按平均值排序:
SELECT articleID, AVG(vote)
FROM ratings
GROUP BY articleID
ORDER BY 2 DESC
推荐阅读
- javascript - 我如何制作一个使用 Svelte 双击 contentEditable?
- google-cloud-platform - 谷歌云:有并发的政策变化。请使用指数退避重试整个读取-修改-写入
- c# - MS Test V2 - 失败时的 ClassInitialize 行为
- python - 如何在 Pandas 中作为 SQL 进行内部连接,陷入以下问题
- angular - 使用 PrimeNG 冷冻色谱柱 - 未对齐
- sql - 在 2 个日期之间填充一定数量的行
- python - 使用 PCA 减少 Python SIFT 描述符
- flutter - 如何为 Codemagic 设置自动构建?
- yii - YII 表单生成器渲染视图不起作用
- random - 在偏向中间的范围内生成随机无符号整数