私は以前、ページごとに必要な情報をデータベースに照会するだけで作業している Web サイトを設計していましたが、すべてのページのすべてのテーブルのすべてのセルを必要とする機能を実装した後 (ああ、少年)、気づきました。最適化のために、これを 1 つの大きなデータベース クエリに結合し、各テーブルを配列に入れることで、SQL 呼び出しを削減する必要があります。
問題は、この配列にスキップされた ID (主キー) をデータベースに含めたいところにあります。もちろん、行/ID の欠落は避けようとしますが、このデータを管理するつもりはないので、このような問題に対処できるようにシステムを十分に賢くしたいと考えています。
私の方法は、十分に単純なものから始まります。
//Run query
$localityResult = mysql_query("SELECT id,name FROM localities");
$localityMax = mysql_fetch_array(mysql_query("SELECT max(id) FROM localities"));
$localityMax = $localityMax[0];
//Assign table to array
for ($i=1;$i<$localityMax+1;$i++)
{
$row = mysql_fetch_assoc($localityResult);
$localityData["id"][$i] = $row["id"];
$localityData["name"][$i] = $row["name"];
}
//Output
for ($i=1;$i<$localityMax+1;$i++)
{
echo $i.". ";
echo $localityData["id"][$i]." - ";
echo $localityData["name"][$i];
echo "<br />\n";
}
2 つの注意事項:
はい、おそらくその $localityMax チェックを PHP ループに移動する必要があります。
最初の配列キーを意図的にスキップしています。
ここでの問題は、データベース内の欠落したキーが考慮されていないため、最終的に次のように出力されることです (サンプル テーブル)。
- 1 - トク
- 2 - ジュノー
- 3 - アンカレッジ
- 4 - ナッシュビル
- 7 - チャタヌーガ
- 8 - メンフィス
- -
- -
行が見つからない場合は「Error」またはNULLなどを書き込み、中断せずに続行したい。$i が $row[$i] より小さいかどうかを確認して、行がスキップされたかどうかを確認できることがわかりましたが、その時点でそれを修正する方法がわかりません。
必要に応じて、詳細情報またはサンプル データベース ダンプを提供できます。私はこの問題に何時間も悩まされてきましたが、試したことは何もありません。あなたの支援と、何かひどい間違いを犯している場合は、一般的なフィードバックをいただければ幸いです。ありがとうございました!
編集:私はそれを解決しました!最初に、配列を反復処理して NULL 値または「エラー」メッセージを設定します。次に、割り当てで、mysql_fetch_assoc() 呼び出しの直後に $i を $row["id"] に設定します。完全なコードは次のようになります。
//Run query
$localityResult = mysql_query("SELECT id,name FROM localities");
$localityMax = mysql_fetch_array(mysql_query("SELECT max(id) FROM localities"));
$localityMax = $localityMax[0];
//Reset
for ($i=1;$i<$localityMax+1;$i++)
{
$localityData["id"][$i] = NULL;
$localityData["name"][$i] = "Error";
}
//Assign table to array
for ($i=1;$i<$localityMax+1;$i++)
{
$row = mysql_fetch_assoc($localityResult);
$i = $row["id"];
$localityData["id"][$i] = $row["id"];
$localityData["name"][$i] = $row["name"];
}
//Output
for ($i=1;$i<$localityMax+1;$i++)
{
echo $i.". ";
echo $localityData["id"][$i]." - ";
echo $localityData["name"][$i];
echo "<br />\n";
}
助けてくれてありがとう!