python - 带随机化的加权数据库查询

标签 python mysql sql django

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

我想执行一个查询,选择按权重列排序的 50 行,但已稍微随机化,并且包含权重低于结果中的行。

例如,按权重排序的前 50 行的权重可能全部为 3 和 2。查询需要包含大部分这些结果,但也包括一些权重为 1 和 0 的结果。它们需要稍微随机化同样,相同的查询并不总是返回相同的结果。另外,即使它将结果限制为 50 个,它也需要最后执行此操作,否则将以不同的顺序返回相同的 50 个结果。

这将集成到 Django 项目中,但数据库是 MySQL,因此原始 SQL 就可以了。

性能至关重要,因为这将发生在高流量网站的着陆页上。

任何想法将不胜感激。

谢谢

最佳答案

您可以将 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 个值,则可以将 limit 子句添加到查询中

关于python - 带随机化的加权数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31759791/

相关文章:

python - 更改其中一个代码文件时自动重新加载 Django 的规则是什么?

python - 在 python 中使用 "or"赋值

mysql - 子查询错误

php - 搜索功能带有2年数据并加入

python - 如何在 Python 中创建守护进程?

python - 正交子空间

MySQL 查询 IF EXISTS ELSE IF ELSE

php - SQL查询-如何显示最近24小时内的点?

php - 从 mysql 中获取列名和行数据并创建 json

sql - 如何在 SQL 中创建带有 2 个参数的函数?