当前位置: 首页 > 面试题库 >

如何在我的网站中实施排名算法以对数据库数据进行排序?

危文乐
2023-03-14
问题内容

我想在我一直在努力的网站上实施排名系统,并决定使用Hacker
News算法。我之所以选择此算法,是因为此处已对其进行了描述。

我正在查看此Python代码(用于构建网站的语言),却不知道如何实现它。

def calculate_score(votes, item_hour_age, gravity=1.8):
    return (votes - 1) / pow((item_hour_age+2), gravity)

给定表:

posts:
    id | title | time_submitted

votes:
    id | postid | userid | score

我将如何从数据库中提取数据?理想的解决方案(最有效)是构造一个MySQL查询,以检索使用该算法排名最高的10个帖子。但是考虑到Hacker
News是在Arc中实现的,这让我认为他们撤出了所有帖子,然后通过算法对其进行排名。

Reddit也想到了这一点…他们使用非关系数据库架构,因此我假设他们像Hacker News一样,在其代码中执行排名-而不是数据库。

您将如何实施?

编辑: 一个帖子可以有很多投票,因为我想记录哪个用户对哪个帖子投票。


问题答案:

您可以在ORDER BY子句中使用所需的数据。

SELECT p.id, p.title, p.time_submitted, SUM(v.score) as num_votes 
  FROM posts p, votes v
 WHERE v.postid = p.id
GROUP BY p.id
ORDER BY 
   (SUM(v.score) - 1) / POW(TIMESTAMPDIFF(HOUR,p.time_submitted,NOW()) + INTERVAL 2 HOUR, 1.8) DESC
LIMIT 100


 类似资料:
  • 问题内容: 我在MySQL表中有一个列,其类型是,而另一列是类型。 我想按以下顺序获取所有表行: 首先排,按 最后一行,排序方式 在中间的所有其他行中,按 可以在1个查询中进行这种排序吗? 问题答案: 使用:

  • 我有一个使用firebase数据库实时排名的迷你游戏。 在我从firebase获得用户分数列表后,我想获得列表之外的当前用户的分数。 获取当前用户的分数很容易,但如何知道列表中的排名是OrderByChild(“分数”)。 这是获取排行榜的代码。

  • 问题内容: 我有一个简单的ajax调用,看起来像这样: 的内容是: 当我运行代码并查看包含哪些数据时,它看起来像这样: “这是1” “这是2” “这是3” “这是4” “这是5” “这是6” …等等,您就明白了。为什么突然将其排序?如何关闭“自动分类”? 问题答案: 永远不能保证在JavaScript的反序列化和序列化之间保留对象键顺序。保证键顺序的唯一方法是提取对象的键并根据确定性标准对其进行排

  • 问题内容: 该问题旨在作为有关PHP中数组排序问题的参考。容易想到您的特定案例是独特的,值得提出新的问题,但是实际上大多数都是此页面上一种解决方案的细微变化。 如果您的问题作为该问题的重复而被关闭,请仅在您可以解释为什么该问题与以下所有内容明显不同时才要求重新提出您的问题。 如何在PHP中对数组排序? 如何在PHP中对 复杂 数组进行排序? 如何在PHP中对对象数组进行排序? 有关使用PHP现有功

  • 问题内容: 我正在尝试创建一个HashSet(或任何集合类型- 但我认为HashSet最适合我),无论插入什么,它都将保持顺序。这是我正在从事的联系人管理器项目。我一直在尝试以下示例。 我希望输出将名称按字母顺序排列-至少根据其名字或姓氏。但是,我什至无法辨别用于此排序的HashSet方法。 我的问题是,如何告诉程序如何根据规范对名称进行排序? 问题答案: HashSet不会为条目提供任何有意义的

  • 我有学生(弦)和老师(弦列表)。我想根据讲师人数按降序提取记录。讲师如下示例:[a、b、c]-3、[e、f]-2、[g、h、i、j]-4。 我要按4,3,2的顺序。 这取决于现场讲师阵列的大小。如何使用mongoTemplate或自定义mongodb查询或聚合进行查询??