我有一些评论表,包括好恶,现在我对正确的订单有疑问。
实际上,我的系统会在最顶层显示最多喜欢的评论。
我正在寻找像youtube中的系统。
这意味着100like / 100不喜欢的评论比1/1更高。
我希望这是可以理解的:)
答案 0 :(得分:4)
这是如何对upvote / downvote,加/减,喜欢/不喜欢等等进行排名的经典问题。有一些可能的解决方案,但它们可能会在特定条件下给出错误的结果。
我强烈建议您阅读并使用 How Not To Sort By Average Rating
<强>问题:强>
你需要某种“得分”来排序。
错误的解决方案#1 :得分=(正评级) - (负评级)
错误解决方案#2:得分=平均评分=(正评分)/ (总评分)
正确的解决方案:得分=威尔逊得分置信度的下限 伯努利参数的区间
示例代码(您可以根据需要轻松调整它):
SELECT id, ((positive + 1.9208) / (positive + negative) -
1.96 * SQRT((positive * negative) / (positive + negative) + 0.9604) /
(positive + negative)) / (1 + 3.8416 / (positive + negative))
AS ci_lower_bound
FROM your_tab
WHERE positive + negative > 0
ORDER BY ci_lower_bound DESC;