MYSQL / PHP - 带%的随机行

时间:2017-08-10 16:58:54

标签: php mysql

我试图与基于%的怪物进行随机相遇。

我的MySQL数据库中有一个名为" monster_chancespawn"的列。 :

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

我想做的是在我的"怪物"中随机运行MySQL SELECT。 DATABASE基于这些%。

我已经有了这个

    $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" }
对于Monster 3也是如此。主要的问题是不能让我改变可用的怪物数量,而另一个问题是我不知道如何让每个怪物的怪兽都在外面foreach的。{而且我不想做30个MYSQL连接,所以每次都要避免使用它。

谢谢!

编辑: &#34;德国德鲁伊克&#34; :给出了这种可能性

我有 Monster1 Monster2 Monster3 。 我在我的数据库和Monster2 1次中复制 Monster1 2次。

我现在有3个 Monster1 ,2个 Monster2 和1个 Monster3 。 所以:50%的机会选择Monster1,33,3为Monster 2和16,6为Monster 3。

要获得更准确的结果,您可以将它们复制到100以获得1个怪物= 1%。要获得怪物,只需:

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

1 个答案:

答案 0 :(得分:0)

IF 你区域内永远不会超过100个怪物,那么你需要一个有3列的表格; zone_idchancemonster_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 )";