1

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をループから外して、一度尋ねることでロードを短縮するにはどうすればよいですか?

ローカルホストでスクリプトを起動したい場合は、すべてをc&pできます:-)

4

2 に答える 2

1

テーブルに何があるかはわかりませんが、基本的にテーブル内のすべてをループしていることを考えると、特定のIDに対して単一のクエリを実行し、より大きなデータセットから必要なものを分類すると思います。

特に、基本的に各IDの完全なデータセットを常にプルバックしている場合は、クエリを気にする必要はなく、INすべてを1つのPHP配列にプルバックして、必要に応じて繰り返し処理します。

于 2012-09-09T11:02:00.917 に答える
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>';
}

?>
于 2012-09-09T10:57:20.477 に答える