2017-08-10 92 views
1

我正在試圖隨機遇到一個基於%的怪物。MYSQL/PHP - 隨機行%

我在MySQL數據庫有一個名爲 「monster_chancespawn」 列:

  • 怪獸1有50%
  • 怪物2得到30%
  • 怪物3得到20%

我想要做的是根據這些%在我的「怪物」數據庫中隨機執行MySQL SELECT

我已經得到了這個

$monsterspawn=$db->prepare('SELECT * FROM monster'); 
    $monsterspawn->execute(); 
    $monsterspawn->CloseCursor(); 


    foreach ($monsterspawn as $infospawn) 
     { 
     echo . $infospawn["monster_chanceloot"] . ; 
     } 

據此,通常回聲 「50 30 20」,但沒有真正有用的。 我想要做的是:

  • 獲得每個怪物的戰利品的機會。
  • 也許會做一些類似於「如果rand在0到50之間,產生怪物1.如果它在50到80之間,產生怪物3.如果它在80到100之間,產生怪物3.但是我希望這是靈活,並改變當我改變了monster_chanceloot

我可以做這樣的事情我想

$randomspawn = rand(0, 100); 
if ($randomspawn >= 0 && $randomspawn <= $infospawn["monster_chanceloot"]) 
{ $monstername = "Monster1" } 

    elseif ($randomspawn >= $infospawn["monster_chanceloot"] && $randomspawn <= $infospawn["monster_chanceloot"](Monster 2's one)) 
    { $monstername = "Monster2" } 

而且同樣的事情怪物3的主要問題是其不會讓我改變可用的怪物的數量,另一個問題是我不知道如何在每個怪物之外獲得每個怪物的怪物_魔獸世界e foreach。我不想做30個MYSQL連接,所以不要每次都使用它。

謝謝!

編輯:這裏是「德國Drulyk」給出一個可能性:

Monster1Monster2Monster3。 我複製Monster1 2次在我的數據庫和Monster2 1時間。

我現在3 有Monster1,2 Monster2和1 Monster3。 所以:有50%的機率選擇一個怪物1,怪物2的怪物爲33,3,怪物3的怪物爲16,6。

爲了獲得更加準確的結果,可以將它們複製到100有1個怪物= 1%。爲了得到一個怪物,只需做:

$query=$db->prepare('SELECT * FROM MONSTERDDB ORDER BY RAND() LIMIT 1'); 
    $query->execute(); 
+0

你會創造超過100個怪物嗎?如果某些怪物在其類型/等級內具有相同的確切機會,該怎麼辦?想象一下這個場景; 50%的時間應該是怪物1或2,30%的時間應該是怪物3,而20%的時間應該是怪物4或5 – MonkeyZeus

+0

我看到了,我會寫出答案 – MonkeyZeus

+0

(刪除了我的最後一條評論,對不起,我不太瞭解)。首先,它會有5到20個怪物,而不是一個大數字。對於你的例子,通常沒有人可以在我的數據庫中擁有相同的百分比,但是如果是這樣的話,那麼我只是然後我不知道,因爲我將它限制爲100%,這意味着如果我放置另一個怪物,我會減少其他怪物的百分比相等。 (50至40%,30至24 ..) –

回答

0

IF你永遠不會在一個區域超過100個怪物,那麼你需要用3列的表格; zone_id,chance,monster_id

每個區域插入100條記錄並將機會設置爲1到100。

每條記錄​​,分別添加一個monster_id,以表示它的通用性;所有100個記錄每個區都要有monster_id

例如,ZONE1需要50條記錄與monster1,30個記錄monster2和20個記錄monster3

在PHP中,你可以寫你的查詢,像這樣

$sql = "select 
      monster_id 
     from 
      table_name 
     where 
      zone_id = $zoneId and 
      chance = ".rand(1, 100); 

此外,我還沒有試過,但我想本土MySQL can achieve the same effect

$sql = "select 
      monster_id 
     from 
      table_name 
     where 
      zone_id = $zoneId and 
      chance = FLOOR(1 + RAND() * 100)"; 
+0

非常感謝,同一個怪物的副本是一個好主意!它需要更多的地方,但目前效果很好,因爲我沒有很多怪物,我猜這沒關係。感謝您的想法! –