首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有随机性的加权数据库查询

具有随机性的加权数据库查询
EN

Stack Overflow用户
提问于 2015-08-01 08:16:54
回答 1查看 108关注 0票数 0

我有一个数据库模型,它有一个名为‘with’的正整数列。还有其他专栏,但它们对这个问题并不重要。权重列基本上描述了这一行的“重要性”。重量的价值越高,越重要。权重范围仅为0-3,默认为0(最不重要)。

我想要执行一个查询,它选择按权重列排序的50行,但略有随机化,并包含权重低于结果的行。

例如,按权重排序的前50行可能都有3和2的权重。查询需要包含大部分这些结果,但也包括一些权重为1和0的行。它们也需要稍微随机化,这样相同的查询就不会总是返回相同的结果。而且,尽管它将结果限制为50,但它需要最后完成这个操作,否则相同的50个结果将以不同的顺序返回。

这将集成到Django项目中,但是DB是MySQL,所以原始SQL是可以的。

性能是至关重要的,因为这将发生在一个高流量网站的登陆页面。

任何想法都将不胜感激。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-01 08:37:16

可以将rand()函数与weight列结合使用。

代码语言:javascript
复制
select * from YOUR_TABLE order by weight * rand() desc

请注意,这意味着一个权重3可能出现在开头,而不是一个权重2。

权重0总是出现在末尾,因为0*任何数字都是0。如果不喜欢,可以将1添加到权重,并将查询转换为

代码语言:javascript
复制
select * from YOUR_TABLE order by (weight + 1) * rand() desc

显然,如果只需要前50个值,则可以将限制子句添加到查询中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31759791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档