嘿,我已经在 php 和 mysql 中建立了评级系统,现在我想选择前 5 名,我做了一些事情,但如果用户添加评级(最高),它是 nr 1 排名。
你们如何在 php 和 mysql 中做到这一点?
该表如下所示:
- ID
- 中
--uid
- 评分
评分是从 1 到 5 的数字
提前致谢!
正如@chaos指出的那样,这就是想法:
SELECT `mid`, SUM(`rating`) AS `total`
FROM `rating`
GROUP BY `mid`
ORDER BY `total` DESC
LIMIT 5
但是,为了确保评分很少的文章不会进入前 5 名,您可以添加一个阈值,只允许评分超过 X 的文章出现在结果中,或许可以更准确地了解前 5 名:
SELECT `mid`, SUM(`rating`) AS `total`, COUNT(1) AS `nrRatings`
FROM `rating`
GROUP BY `mid`
HAVING nrRatings > 5 // This is the threshold. Only articles with more than
// 5 ratings will be considered
ORDER BY `total` DESC
LIMIT 5
SELECT `mid`, SUM(`rating`) AS `total`
FROM `rating`
GROUP BY `mid`
ORDER BY `total` DESC
LIMIT 5
如果我理解你的措辞,看起来 1 的评分是最高的?ORDER BY 应该是 ASC。我认为 AVG() 会比 SUM() 更合适。完全同意阈值的想法,所以像这样(无耻的 c/p 重写;谢谢@Machine :P):
SELECT `mid`, AVG(`rating`) AS `avg_rating`, SUM(1) AS `nrRatings` 来自“评级” 按“中”分组 拥有 nrRatings > 5 ORDER BY `avg_rating` ASC 限制 5