具有不同概率的随机行选择

时间:2015-07-03 17:39:03

标签: sql select random mysqli probability

我正在寻找一种方法,从400-500行1个随机行的表中获取,但不是以相同的概率。

例如: 我的表看起来像:

对象 - 等级

  • Object_A Top
  • Object_B低
  • Object_C正常

我有一个对象的3个可能的等级,我希望这个对象具有等级" Top"得到三倍的机会。应该就像表中有3行Object_A一样。正常情况相同,但只有两倍。

现在我收到了这段代码......

$result = mysqli_query($link, "SELECT * FROM objects ORDER BY RAND() LIMIT 1");

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}

  • 当rand为== 3时,有33%的可能性,只会返回1条最高记录。
  • 当rand为== 2时,将返回33%的几率,只有1个最高记录(50%几率)或1个正常记录(50%几率),依此类推。

您可以通过指定不同的数字来调整重量 例如,如果您想要返回大约80%时间的顶行,您可以将值分配为10,然后执行:

$rand = rand()%10 +1;