我正在尝试编写一个插件来bbPress(开源论坛软件),它的工作方式类似于Hacker News(http://news.ycombinator.com/).
具体来说,我想使用以下算法对论坛 - 线程(bbPress称之为"主题")的顺序进行排序:
sort_value = (p - 1) / (t + 2)^1.5
where p = total votes for each topic from users
t = time since submission of each topic in hours
Run Code Online (Sandbox Code Playgroud)
我希望能够使用MySQL通过这个计算的sort_value对主题进行排序.
topics表中的相关字段如下所示:
topic_id bigint(20)
topic_start_time datetime
Run Code Online (Sandbox Code Playgroud)
这是悬而未决,但我认为将有另一个表存储用户的个人投票,因此我们将能够知道用户是否已经投票.另一个表格将存储每个主题的当前投票总数.也许该表中会有另一个字段存储最新计算的sort_Value?
为了100%准确,每次新投票后都应更新sort_value .但是,这会给数据库服务器增加太多负载,特别是如果我们尝试更新所有主题.如果必须,我们可以通过仅计算最后X#个主题的sort_value来限制数据集.我们还可以通过仅定期更新sort_value来限制负载(例如,通过cron作业每5分钟更新一次).
这些快捷方式可能会使负载可以接受,但我更喜欢更优雅的解决方案.
你会如何构建这个?:-)