上下文:我正在查询一个数据库,以返回指定数量的怪物,用于在一个简单的基于网络的角色扮演游戏中进行战斗。
问题:我有一个简单的 MYSQL 查询,其中包含一个 WHERE 子句以确定怪物的“级别”。在之前的函数中,我构建了一个数组,其中包含应返回的相应怪物的等级;像这样的东西:
$levels = Array( [0] => 3 [1] => 1 [2] => 1 )
所以在上面的数组中,Value对应的是level。所以我希望返回 3 个怪物 -- 级别 3、级别 1 和级别 1。
很简单。现在我想用以下查询 MYSQL 并大概使用循环进行查询 3 次以获得我的 3 个怪物;像这样的东西:
$query = "SELECT *, CardHP as EncounterCardHP, CardAP as EncounterCardAP";
$query .= " FROM Cards";
$query .= " WHERE CardTypeId = 1 AND CardRarity = {$level}";
$query .= " ORDER BY RAND() LIMIT 1";
所以在上面的查询中,变量 {$level} 是前一个数组中的怪物等级。循环格式是我挣扎的地方。我正在尝试类似的东西:
while ($i = $levels) {
$query = "SELECT *, CardHP as EncounterCardHP, CardAP as EncounterCardAP";
$query .= " FROM Cards";
$query .= " WHERE CardTypeId = 1 AND CardRarity = {$i}";
$query .= " ORDER BY RAND() LIMIT 1";
$result_set = mysql_query($query, $connection);
confirm_query($result_set);
return $result_set;
}
我认为这很接近,但我没有看到我如何才能最终从 MYSQL 给我一个单一的怪物数组。在上面看来,我正在构建 3 个独立的数组?我是否需要使用 array_merge(),或者是否有更简单、更优雅的方法来做到这一点?如果我得到所有相同级别的怪物,我可以简单地运行查询 1 次和 LIMIT 3,但我需要怪物与之前数组显示的内容相对应。
有道理吗?始终感谢您的帮助。
最佳答案
我不完全明白你想做什么,但这应该循环并得到你的数组:
foreach ($levels as $key => $value) {
$query = "SELECT *, CardHP as EncounterCardHP, CardAP as EncounterCardAP FROM Cards WHERE WHERE CardTypeId = 1 AND CardRarity = {$value} ORDER BY RAND() LIMIT 1";
$results = mysqli_query($connection, $query);
while($row = $result->fetch_array(MYSQLI_BOTH)) {
$monsters[$key]['HP'] = $row['CardHP'];
//Add as needed
}
}
它创建一个多维数组,其中第一个键与级别中的键相同,后续键是 SQL 查询的结果。
$monsters = array(
[0] => array(
['HP'] => 10
['AP'] => 5
)
[1] => array(
['HP'] => 5
['AP'] => 7
)
)
此外,mysqli 可能更适合您使用,因为它支持过程式风格和面向对象,并且大多数功能完全相同,只是使用了 mysqli 前缀。
关于php - 使用PHP循环多次查询MYSQL数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14314428/