1

我想从数据库返回一个排序列表。我想使用的功能可能看起来像

(field1_value * w1 + field2_value * w2) / ( 1 + currentTime-createTime(field3_value)) 

这是sort by popularity我的应用程序的功能。

我想知道其他人是否如何在数据库中进行这种排序(比如 MySQL)

我最终将在 django 中实现这一点,但任何关于实现这一目标的总体方向/策略的评论都是最受欢迎的。

  • 我是否定义了一个函数并为每个请求的行计算分数?
  • 我是否为此分数留出一个字段并定期计算分数?
  • 或者使用时间作为排序函数的变量看起来很糟糕?
  • 其他网站如何实现“按人气排序”?

我放了时间变量,因为我希望更新的帖子得到更多关注。

4

1 回答 1

1
  1. 我是否定义了一个函数并为每个请求的行计算分数?

    您可以这样做,但这不是必需的:您可以简单地将该表达式提供给您的ORDER BY子句(1 + currentTime分母的部分不会影响结果的顺序,因此我已将其删除):

    ORDER BY (field1 * w1 + field2 * w2) / UNIX_TIMESTAMP(field3) DESC
    

    或者,如果您的查询正在选择这样的评级,您可以只ORDER BY使用别名列名:

    ORDER BY rating
    
  2. 我是否为此分数留出一个字段并定期计算分数?

    我不知道你为什么需要定期计算(如上所述,分母的常数部分对结果的顺序没有影响)——但是如果你要将上述表达式的结果存储在它的自己的字段,然后执行ORDER BY操作会快得多(特别是如果该新字段被适当索引)。

于 2012-11-30T09:40:57.320 回答