我正在寻找一种方法,从400-500行1个随机行的表中获取,但不是以相同的概率。
例如: 我的表看起来像:
对象 - 等级
我有一个对象的3个可能的等级,我希望这个对象具有等级" Top"得到三倍的机会。应该就像表中有3行Object_A一样。正常情况相同,但只有两倍。
现在我收到了这段代码......
$result = mysqli_query($link, "SELECT * FROM objects ORDER BY RAND() LIMIT 1");
答案 0 :(得分:2)
让我们说你的排名栏有这三个值:
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%时间的顶行,您可以将值分配为10,然后执行:
$rand = rand()%10 +1;