2012-11-30 85 views
1

我想从数据库返回排序列表。我想使用的功能可能看起来像通过自定义函数对数据库的查询结果进行排序

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

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

我不知道别人怎么做这种在DB排序(说的MySQL)

我要在Django最终实现这一点,但在大方向/战略发表任何评论来实现,这是最欢迎。

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

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

回答

1
  1. 难道我定义一个函数,计算得分行对每个请求?

    你可以做,但它不是必需的:你可以简单地提供一个表达你的ORDER BY条款(分母不影响结果的顺序的1 + currentTime一部分,所以我已删除了它):

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

    另外,如果您的查询是选择这样的评价,你可以仅仅ORDER BY的别名的列名:

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

    我不知道你为什么会需要在固定时间间隔计算(如上面提到的,分母的恒定部分具有顺序结果没有影响)—,但如果你要存储上述表达式在其自己的字段中的结果,然后执行ORDER BY操作将会非常快(特别是如果该新字段被适当地索引)。

+0

感谢您的回应!我想问一下这两种策略是否比其他策略更受欢迎。计算每个请求的分数与分批计算分数......无论如何,我担心随着表格行数越来越多,它会变慢。总之,应用可以扩展的排序的好策略是什么? – eugene

+0

@Eugene:看到我对上面#2的回答。 – eggyal

+0

对于预计会增长的表是否可行? – eugene

相关问题