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», но ничего действительно полезного.
Что я хочу сделать, это:

  • Получение шансов каждого монстра на добычу.
  • Может быть, что-то вроде «Если ранд находится между 0 и 50, вызовите Monster 1. Если это между 50 и 80, вызовите Monster 3. Если это между 80 и 100, вызовите Monster 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-соединение, поэтому избегайте его каждый раз.

Спасибо !

РЕДАКТИРОВАТЬ : Вот возможность, предоставленная «Немецкий Друлык» :

я получил Monster1, Monster2, Monster3.
Я дублирую Monster1 2 раза в моей базе данных и Monster2 1 раз.

У меня сейчас 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

Решение

ЕСЛИ вы никогда не превысите 100 монстров в зоне, тогда вам нужна таблица с 3 столбцами; zone_id, chance, monster_id

Для каждой зоны вставьте 100 записей и установите шанс от 1 до 100 включительно.

Для каждой записи добавьте monster_id, соответствующий его общности; все 100 записей на зону должны иметь monster_id

Например, для зоны 1 нужно 50 записей с monster1, 30 записей для monster2 и 20 записей для monster3

В PHP вы можете написать свой запрос так

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

Кроме того, я не пробовал это, но я думаю, родной MySQL может достичь того же эффекта:

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector