簡體   English   中英

具有不同概率的隨機行選擇

[英]Random row selection with different probabilities

我正在尋找一種方法來從具有400-500行的表中獲得1個隨機行,但概率不相同。

例如:我的表如下所示:

對象-等級

  • Object_A頂部
  • Object_B低
  • Object_C普通

我對一個對象有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}

  • 當rand == 3 ,機會為33%,則僅返回1個最高記錄。
  • 當rand == 2 ,有33%的機會,將僅返回1個最高記錄(50%的機會)或1個正常記錄(50%的機會),依此類推。

您可以通過分配其他數字來調整重量。
例如,如果您希望最上面的行返回大約80%的時間,則可以為top賦值10,然后執行以下操作:

$rand = rand()%10 +1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM