我要求MySQL提供数据,但它会减慢整个脚本的速度。但我不知道如何摆脱循环。我尝试将其转换为PHP数组,但老实说,经过一天的尝试,我失败了。
<?php
$id = '1';
include_once 'include_once/connect.php';
for ($x = 1; $x <= 5; $x++) {
for ($y = 1; $y <= 5; $y++) {
$xy = $x."x".$y;
$pullMapInfo = "SELECT value FROM mapinfo WHERE id='".$id."' AND xy='".$xy."'";
$pullMapInfo2 = mysql_query($pullMapInfo) or die('error here');
if ($pullMapInfo3 = mysql_fetch_array($pullMapInfo2)) {
#some code
} else {
#some code
}
}
}
?>
如何让MySQL查询$pullMapInfo2
失去循环以通过询问一次来缩短加载它?
如果你想在你的本地主机上解雇脚本,你可以解决整个问题: - )
答案 0 :(得分:1)
我不确定你的表中有什么,但考虑到你基本上是在循环其中的所有内容,我会说对给定的Id做一个查询然后从更大的数据集中挑选出你需要的东西
特别是如果你总是基本上撤回每个id的完整数据集,那么就没有理由对IN
查询感到烦恼,只需将它全部拉回到一个PHP数组中,然后迭代它作为需要的。
答案 1 :(得分:0)
使用MySQL IN子句
<?php
$id = '1';
include_once 'include_once/connect.php';
// first we create an array with all xy
$array = array();
for ($x = 1; $x <= 5; $x++) {
for ($y = 1; $y <= 5; $y++) {
$xy = $x."x".$y;
$array[] = $xy;
}
}
$in = "'" . implode("', '", $array) . "'";
$pullMapInfo = "SELECT xy, value FROM mapinfo WHERE id='".$id."' AND xy IN ({$in})";
$pullMapInfo2 = mysql_query($pullMapInfo) or die('error here');
// we create an associative array xy => value
$result = array();
while (($pullMapInfo3 = mysql_fetch_assoc($pullMapInfo2)) !== false) {
$result[ $pullMapInfo3['xy'] ] = $pullMapInfo3['value'];
}
// we make a loop to display expected output
foreach ($array as $xy)
{
if (array_key_exists($xy, $result)) {
echo '<div class="castle_array" style="background-image: url(tiles/'.$result[$xy].'.BMP)" id="'.$xy.'">'. $result[$xy] .'</div>';
} else {
echo '<div class="castle_array" id="'.$xy.'"></div>';
}
echo '<div class="clear_both"></div>';
}
?>