从 mysql 数据库中随机选择 php on wamp
Random selection from mysql database with php on wamp
我正在尝试做一个反恐精英案件的开场白。我的问题是,我怀疑原因是 wamp,它不会加载,或者它需要很长时间以致于我无法获得任何结果。我阅读了所有关于使用 mysqli 从数据库中选择一个随机项目的帖子,它确实很慢并且不适合使用,但我认为它不会这么慢。所以我真的很想知道它是否真的是导致问题的原因,或者我是否遗漏了一个完全不同的错误。提前致谢:)
if(isset($_GET['iid'])) {
$iid = rString($_GET['iid']);
$checkOwnerQuery = $data->query('SELECT * FROM inventory WHERE id = "'.$iid.'" AND ownerId = "'.$id.'"');
$checkOwner = $checkOwnerQuery->num_rows;
if ($checkOwner == 1) {
// OWNER CONFIRMED, CONTINUE OPENING
$randomNmbr = mt_rand(1, 100);
if($randomNmbr == 1) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "1" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 97) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "97" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 95) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "95" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 90) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "90" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 80) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "80" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 60) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "60" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 50) {
goto a;
} else if($randomNmbr <= 50 && $randomNmbr != 1) {
a:
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "50" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else {
echo 'Major danger';
}
echo '<div class="item_img_center" style="background-image: url()"></div>';
} else {
header('Location: inventory.php');
}
} else {
header('Location: inventory.php');
}
我认为您不希望 while
循环您的随机查询,因为每次 return 结果(即永远,因为那些总是 return 结果,除非 caserewards 完全为空)。
尝试只使用:
$row = $data->query('SELECT * FROM caserewards WHERE chance = "50" ORDER BY RAND() LIMIT 1')->fetch_assoc();
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
对所有其他查询进行类似的更新。
我正在尝试做一个反恐精英案件的开场白。我的问题是,我怀疑原因是 wamp,它不会加载,或者它需要很长时间以致于我无法获得任何结果。我阅读了所有关于使用 mysqli 从数据库中选择一个随机项目的帖子,它确实很慢并且不适合使用,但我认为它不会这么慢。所以我真的很想知道它是否真的是导致问题的原因,或者我是否遗漏了一个完全不同的错误。提前致谢:)
if(isset($_GET['iid'])) {
$iid = rString($_GET['iid']);
$checkOwnerQuery = $data->query('SELECT * FROM inventory WHERE id = "'.$iid.'" AND ownerId = "'.$id.'"');
$checkOwner = $checkOwnerQuery->num_rows;
if ($checkOwner == 1) {
// OWNER CONFIRMED, CONTINUE OPENING
$randomNmbr = mt_rand(1, 100);
if($randomNmbr == 1) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "1" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 97) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "97" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 95) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "95" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 90) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "90" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 80) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "80" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 60) {
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "60" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else if($randomNmbr >= 50) {
goto a;
} else if($randomNmbr <= 50 && $randomNmbr != 1) {
a:
while($row = $data->query('SELECT * FROM caserewards WHERE chance = "50" ORDER BY RAND() LIMIT 1')->fetch_assoc()) {
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
}
echo $rewardName;
} else {
echo 'Major danger';
}
echo '<div class="item_img_center" style="background-image: url()"></div>';
} else {
header('Location: inventory.php');
}
} else {
header('Location: inventory.php');
}
我认为您不希望 while
循环您的随机查询,因为每次 return 结果(即永远,因为那些总是 return 结果,除非 caserewards 完全为空)。
尝试只使用:
$row = $data->query('SELECT * FROM caserewards WHERE chance = "50" ORDER BY RAND() LIMIT 1')->fetch_assoc();
$rewardId = $row['id'];
$rewardName = $row['name'];
$rewardLore = $row['lore'];
$rewardType = $row['type'];
$rewardAmount = $row['amount'];
$rewardChance = $row['chance'];
$rewardColor = $row['color'];
$rewardImg = $row['img'];
$rewardActive = $row['active'];
对所有其他查询进行类似的更新。