我有一个数据库模型,它有一个名为‘with’的正整数列。还有其他专栏,但它们对这个问题并不重要。权重列基本上描述了这一行的“重要性”。重量的价值越高,越重要。权重范围仅为0-3,默认为0(最不重要)。
我想要执行一个查询,它选择按权重列排序的50行,但略有随机化,并包含权重低于结果的行。
例如,按权重排序的前50行可能都有3和2的权重。查询需要包含大部分这些结果,但也包括一些权重为1和0的行。它们也需要稍微随机化,这样相同的查询就不会总是返回相同的结果。而且,尽管它将结果限制为50,但它需要最后完成这个操作,否则相同的50个结果将以不同的顺序返回。
这将集成到Django项目中,但是DB是MySQL,所以原始SQL是可以的。
性能是至关重要的,因为这将发生在一个高流量网站的登陆页面。
任何想法都将不胜感激。
谢谢
发布于 2015-08-01 08:37:16
可以将rand()函数与weight列结合使用。
select * from YOUR_TABLE order by weight * rand() desc请注意,这意味着一个权重3可能出现在开头,而不是一个权重2。
权重0总是出现在末尾,因为0*任何数字都是0。如果不喜欢,可以将1添加到权重,并将查询转换为
select * from YOUR_TABLE order by (weight + 1) * rand() desc显然,如果只需要前50个值,则可以将限制子句添加到查询中。
https://stackoverflow.com/questions/31759791
复制相似问题