12 php sql algorithm popularity
我正在创建一个类似digg的网站,它将有一个不同类别的主页.我想显示最受欢迎的提交.
我们的评级系统只是"喜欢",比如"我喜欢这个"等等.我们基本上希望每次显示"喜欢"次数最多的提交.我们希望有三个类别:历史人气,上周和最后一天.
有人知道帮助的方法吗?我不知道如何做到这一点并使其高效.我认为我们可以使用某种类型的cron-job每10分钟运行一次并且在过去的10分钟内吸收喜欢的数量......但是我被告知这样效率很低?
救命?
谢谢!
通常,Digg和Reddit类似的站点在提交日期之前而不是投票时间.这种方式只需要一个简单的SQL查询来查找X时间段的顶级提交.这是一个伪查询,使用此方法查找过去24小时内最受欢迎的10个链接:
select * from submissions
where (current_time - post_time) < 86400
order by score desc limit 10
Run Code Online (Sandbox Code Playgroud)
基本上,这个查询说找到所有提交的文件,其中从现在到发布的时间之间的秒数小于86400,这在UNIX时间是24小时.
如果您真的想在X时间间隔内测量受欢迎程度,则需要将每个投票的帖子和时间存储在另一个表中:
create table votes (
post foreign key references submissions(id),
time datetime,
vote integer); -- +1 for upvote, -1 for downvote
Run Code Online (Sandbox Code Playgroud)
然后你可以生成一个X和Y次之间最受欢迎的帖子列表,如下所示:
select sum(vote), post from votes
where X < time and time < Y
group by post
order by sum(vote) desc limit 10;
Run Code Online (Sandbox Code Playgroud)
从这里开始,你只是一个跳跃,跳过和内部联接,而不是将后期数据与返回的id绑定.