MYSQL 按喜欢/不喜欢和受欢迎程度排序

Posted

技术标签:

【中文标题】MYSQL 按喜欢/不喜欢和受欢迎程度排序【英文标题】:MYSQL order by like/dislikes and popularity 【发布时间】:2016-03-10 17:39:34 【问题描述】:

我有包含喜欢和不喜欢的 cmets 表,现在我的顺序有问题..

实际上,我的系统显示最喜欢的 cmets 在顶部。

我正在 youtube 中寻找类似系统的东西。

这意味着100like/100dislikes的评论顺序高于1/1..

我希望这是可以理解的:)

【问题讨论】:

你应该阅读similiar question和How Not To Sort By Average Rating 【参考方案1】:

这是如何对赞成/反对、加/减、喜欢/不喜欢等进行排名的经典问题。有几种可能的解决方案,但在特定条件下它们可能会给出错误的结果。

我强烈建议阅读和使用 How Not To Sort By Average Rating

中的排序

问题:

你需要某种“分数”来排序。

错误的解决方案 #1:分数 =(正面评分)-(负面评分)

错误的解决方案 #2: 分数 = 平均评分 =(正面评分)/ (总评分)

正确的解决方案: 得分 = Wilson 得分置信度的下限 伯努利参数的区间

示例代码(您可以根据需要轻松调整):

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;

【讨论】:

以上是关于MYSQL 按喜欢/不喜欢和受欢迎程度排序的主要内容,如果未能解决你的问题,请参考以下文章

具有递归 CTE 的 Postgres:在保留树结构的同时按受欢迎程度对子节点进行排序/排序(父节点始终高于子节点)

最喜欢在客户端在 Laravel 中排序/过滤表的方式?

关于简单插入排序的奥秘

Laravel:orderBy喜欢计数

Django 按日期按计数排序

MySQL Select 语句 - 两个表,按其他表的计数对一个表进行排序