php - MYSQL/PHP - 带 % 的随机行

标签 php mysql

我正在尝试根据 % 随机遇到怪物。

我在我的 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" }

对于 Monster 3 也是一样。主要问题是不允许我更改可用的怪物数量,另一个问题是我不知道如何获得每个怪物的 monster_chanceloot foreach。而且我不想建立 30 个 MYSQL 连接,所以避免每次都使用它。

谢谢!

编辑:这是“German Drulyk”给出的可能性:

我得到了Monster1Monster2Monster3。 我在数据库中复制了 Monster1 2 次,复制了 Monster2 1 次。

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

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

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

最佳答案

如果您在一个区域中永远不会超过 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 )";

关于php - MYSQL/PHP - 带 % 的随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45619552/

相关文章:

javascript - 使用 jQuery 更新文本框

php - 数组到字符串到数组的转换

MySql 地理空间错误..?

php - 通过给定字段通过 UNION 组加入 2 个表,并仅获取该组的最新信息

php - 如何存储在 MySQL 表中创建的时间?

php - 从一个数据库表中选择一些数据并插入到同一数据库中的另一个表中

php - 在查询字符串中使用长哈希来识别动态文档的安全性

sql - 什么时候使用内连接,什么时候使用子查询?

javascript - 一次仅显示数据库中的一项,然后循环显示其他项

php - PHP中将mysql查询结果保存到HTML文件