dre*_*ves 13 mysql sql ranking
News.YC是公正的
(p - 1)/(t + 2)^ 1.5
其中p =点,t =年龄,以小时为单位
鉴于下表,我想在纯mySQL中做到这一点:
投票领域的想法是投票可以被取消.出于排名的目的,vote = 0相当于没有投票.(所有投票都是赞成票,没有投票权.)
问题是如何构造一个返回前N个postID的查询,按照Paul Graham的公式排序.总共大约有10万个帖子,所以如果你认为需要缓存分数或任何东西,我很乐意听到有关这方面的建议.
(显然这不是火箭科学,我当然可以解决这个问题,但我认为有人在早餐,午餐和晚餐时吃SQL会让人感到震惊.而且在StackOverflow上提供它似乎很有价值.)
相关问题:
OMG*_*ies 21
未经测试:
SELECT x.*
FROM POSTS x
JOIN (SELECT p.postid,
SUM(v.vote) AS points
FROM POSTS p
JOIN VOTES v ON v.postid = p.postid
GROUP BY p.postid) y ON y.postid = x.postid
ORDER BY (y.points - 1)/POW(((UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(x.timestamp))/3600)+2, 1.5) DESC
LIMIT n
Run Code Online (Sandbox Code Playgroud)
$sql=mysql_query("SELECT * FROM news
ORDER BY ((noOfLike-1)/POW(((UNIX_TIMESTAMP(NOW()) -
UNIX_TIMESTAMP(created_at))/3600)+2,1.5)) DESC
LIMIT 20");
Run Code Online (Sandbox Code Playgroud)
这段代码可以让我创建像HN这样的主页.
新闻:是表名.
noOfLike:此新闻的用户总数.
created_at:TimeStamp,当新闻发布时