2015-07-03 150 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;