以下是Paul Graham 如何描述 Hacker News 的排名算法:
News.YC的只是
(p - 1) / (t + 2)^1.5
其中 p = 点数和 t = 年龄(以小时为单位)
鉴于下表,我想在纯 mySQL 中执行此操作:
- 具有字段 postID(索引)和 postTime(时间戳)的表 Posts。
- 带有字段 voteID(索引)、postID 和 vote(整数,0 或 1)的投票表。
投票字段的想法是可以撤销投票。就排名而言,vote=0 相当于根本没有投票。(所有投票都是赞成票,没有反对票。)
问题是如何构造一个返回前 N 个 postID 的查询,按 Paul Graham 的公式排序。总共大约有 100k 个帖子,所以如果您认为需要缓存分数或其他任何内容,我很乐意听取有关此方面的建议。
(显然这不是火箭科学,我当然可以弄清楚,但我认为早餐、午餐和晚餐都吃 SQL 的人可能会喋喋不休。而且在 StackOverflow 上提供似乎很有价值。)
相关问题: