1

嘿,我已经在 php 和 mysql 中建立了评级系统,现在我想选择前 5 名,我做了一些事情,但如果用户添加评级(最高),它是 nr 1 排名。

你们如何在 php 和 mysql 中做到这一点?

该表如下所示:

- ID

- 中

--uid

- 评分

评分是从 1 到 5 的数字

提前致谢!

4

3 回答 3

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
于 2009-07-20T20:16:51.380 回答
2
SELECT `mid`, SUM(`rating`) AS `total`
FROM `rating`
GROUP BY `mid`
ORDER BY `total` DESC
LIMIT 5
于 2009-07-20T20:08:20.460 回答
0

如果我理解你的措辞,看起来 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
于 2009-07-20T20:32:36.107 回答