![](/img/trans.png)
[英]Select random row from a PostgreSQL table with weighted row probabilities
[英]Random row selection with different probabilities
我正在寻找一种方法来从具有400-500行的表中获得1个随机行,但概率不相同。
例如:我的表如下所示:
对象-等级
我对一个对象有3个可能的等级,而我希望等级为“最高”的对象获得三倍的机会。 就像表中有3行带有Object_A的行。 与“普通”相同,但机会只有两倍。
现在我得到了这段代码...
$result = mysqli_query($link, "SELECT * FROM objects ORDER BY RAND() LIMIT 1");
假设您的等级列具有以下三个值:
3 top
2 normal
1 low
然后,您可以做的是:
$rand = rand()%3 +1;
$result = mysqli_query($link, "
SELECT * FROM (
SELECT * FROM objects ORDER BY RAND()
) as t
WHERE rank >= {$rand} LIMIT 1"
);
关键是要了解where条件: rank >= {$rand}
。
== 3
,机会为33%,则仅返回1个最高记录。 == 2
,有33%的机会,将仅返回1个最高记录(50%的机会)或1个正常记录(50%的机会),依此类推。 您可以通过分配其他数字来调整重量。
例如,如果您希望最上面的行返回大约80%的时间,则可以为top赋值10,然后执行以下操作:
$rand = rand()%10 +1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.