我想从DB返回一个排序列表。我想要使用的功能可能看起来像
(field1_value * w1 + field2_value * w2) / ( 1 + currentTime-createTime(field3_value))
适用于我的应用程序的sort by popularity
功能。
我想知道其他人是如何在DB中进行这种排序的(比如MySQL)
我最终会在django中实现这一点,但是对于实现这一目标的总体方向/策略的任何评论都是最受欢迎的。
我把时间变量,因为我希望更新的帖子得到更多的关注。
答案 0 :(得分:1)
我是否为每个请求定义一个函数并计算行的得分?
你可以这样做,但没有必要:你可以简单地将这个表达式提供给你的ORDER BY
子句(分母的1 + currentTime
部分不会影响结果的顺序,所以我有删除它):
ORDER BY (field1 * w1 + field2 * w2) / UNIX_TIMESTAMP(field3) DESC
或者,如果您的查询选择了这样的评分,您只能ORDER BY
别名列名:
ORDER BY rating
我是否为此分数留出一个字段并定期计算分数?
我不知道为什么你需要定期计算(如上所述,分母的常数部分对结果的顺序没有影响) - 但如果你是要将上述表达式的结果存储在自己的字段中,那么执行ORDER BY
操作会非常快(特别是如果新字段被适当地编入索引)。