Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用SQL实现黑客新闻排名算法_Sql_Mysql_Ranking - Fatal编程技术网

用SQL实现黑客新闻排名算法

用SQL实现黑客新闻排名算法,sql,mysql,ranking,Sql,Mysql,Ranking,以下是方法: 新闻,YC只是 (p-1)/(t+2)^1.5 式中,p=点数,t=以小时为单位的年龄 考虑到下表,我希望在纯mySQL中实现这一点: 带有postID(索引)和POSTIME(时间戳)字段的表POST 表中包含字段voteID(索引)、postID和vote(整数、0或1)的投票 投票区的理念是投票可以取消。 就排名而言,投票=0等于没有投票。 (所有的票都是赞成票,而不是反对票。) 问题是如何构造一个查询,返回按Paul Graham公式排序的前N个postid。 总共大约

以下是方法:

新闻,YC只是

(p-1)/(t+2)^1.5

式中,p=点数,t=以小时为单位的年龄

考虑到下表,我希望在纯mySQL中实现这一点:

  • 带有postID(索引)和POSTIME(时间戳)字段的表POST
  • 表中包含字段voteID(索引)、postID和vote(整数、0或1)的投票
投票区的理念是投票可以取消。 就排名而言,投票=0等于没有投票。 (所有的票都是赞成票,而不是反对票。)

问题是如何构造一个查询,返回按Paul Graham公式排序的前N个postid。 总共大约有10万个帖子,所以若你们认为需要缓存分数或其他什么,我很乐意听到你们的建议

(很明显,这不是火箭科学,我当然可以弄明白,但我认为早餐、午餐和晚餐都吃SQL的人可能会很快就把它解决掉。而且在StackOverflow上提供SQL似乎很有价值。)


相关问题:

未经测试:

  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
这段代码对我来说可以制作一个像HN这样的主页

新闻:是表名

noOfLike:有多少用户喜欢这条新闻


创建于:TimeStamp,当该新闻发布时,

刚刚在一个项目上实现了这一点,到目前为止似乎效果很好。将进行进一步测试并报告。
$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");