2015-07-03 130 views
1

我正在寻找一种方法从400-500行的表中获得1个随机行,但不具有所有相同的概率。不同概率的随机行选择

例如: 我的表如下所示:

对象 - 等级

  • Object_A顶
  • Object_B低
  • Object_C正常

我有3名可能的行列一个对象,我希望排名“Top”的对象有三次更多机会获得。它应该像表中的Object_A有3行一样。正常但相同的机会只有两倍。

现在我得到这个代码...

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

回答

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" 
); 

关键是了解哪里条件:rank >= {$rand}

  • 当兰德将是== 3,33%的机会,只有1个最高纪录将被返回。
  • 当兰德将是== 2时,有33%的几率,只有1个最高纪录(50%几率)或1个正常记录(50%几率)将被退回,依此类推。

您可以通过分配不同的数字来调整重量。
例如,如果你想在上面一行返回有关〜时代的80%,你可以指定顶值10,然后做:

$rand = rand()%10 +1;