计算MySQL中的加权分数 - 星级评分和投票

时间:2015-11-13 12:35:54

标签: php mysql

我的帖子评分为星级,比例为1比5。我想通过评分来排序帖子,包括投票数量因素(让我们称之为人气)。

我之前曾问过类似的问题,但我没有看到明确的解决方案。非常适合了解可用于此目的的公式,以及它的MySQL等价物。

以下示例有望解释我的需求:

  • (5星,1票)<(4星,3票)
  • (4星,1票)<(3星,12票)
  • (1星,345票)<(2星,5票)

有没有人有解决这个问题的经验?我已经尝试了一些简单的公式(例如 this ),但他们无法“认识到” [5,2.5] 的情况不同和(2.5,0)。我认为使用的函数可能是对数的,但我似乎无法以正确的方式达到它。

任何想法都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

对于每个明星计数添加一些权重这样简单的事情就行了,我会说。

我创建了一个简单的表:

╔════╦════════╦════════╦════════╦════════╗
║ Id ║ Name   ║ Stars3 ║ Stars2 ║ Stars1 ║
╠════╬════════╬════════╬════════╬════════╣
║ 1  ║ Item 1 ║ 1      ║ 0      ║ 0      ║
║ 2  ║ Item 2 ║ 0      ║ 1      ║ 2      ║
║ 3  ║ Item 3 ║ 0      ║ 2      ║ 5      ║
║ 4  ║ Item 4 ║ 4      ║ 0      ║ 2      ║
╚════╩════════╩════════╩════════╩════════╝

基本上, StarsX 显示特定星的数量。

我做了什么,想一些随机数让它成为 fair-ish

  • 3星值5分;
  • 2颗星值2分;
  • 1颗星值1分;

现在,一个简单的查询来获得总分:

SELECT *,(stars3*5+stars2*2+stars1) as total_score FROM `posts_with_scores`

我明白了:

╔════╦════════╦════════╦════════╦════════╦═════════════╗
║ Id ║ Name   ║ Stars3 ║ Stars2 ║ Stars1 ║ Total Score ║
╠════╬════════╬════════╬════════╬════════╬═════════════╣
║ 1  ║ Item 1 ║ 1      ║ 0      ║ 0      ║ 5           ║
║ 2  ║ Item 2 ║ 0      ║ 1      ║ 2      ║ 4           ║
║ 3  ║ Item 3 ║ 0      ║ 2      ║ 5      ║ 9           ║
║ 4  ║ Item 4 ║ 4      ║ 0      ║ 2      ║ 22          ║
╚════╩════════╩════════╩════════╩════════╩═════════════╝

新闻稿等用similar system was sometimes根据收到的奖牌计算各国的得分。金牌得3分,银牌2分,铜牌得分。