通过自定义函数从DB排序查询结果

时间:2012-11-30 09:37:55

标签: mysql database django sorting

我想从DB返回一个排序列表。我想要使​​用的功能可能看起来像

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

适用于我的应用程序的sort by popularity功能。

我想知道其他人是如何在DB中进行这种排序的(比如MySQL)

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

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

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

1 个答案:

答案 0 :(得分:1)

  1.   

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

    你可以这样做,但没有必要:你可以简单地将这个表达式提供给你的ORDER BY子句(分母的1 + currentTime部分不会影响结果的顺序,所以我有删除它):

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

    或者,如果您的查询选择了这样的评分,您只能ORDER BY别名列名:

    ORDER BY rating
    
  2.   

    我是否为此分数留出一个字段并定期计算分数?

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