何が速いのか自問自答していました。ループ変数に対して特定のテーブル列をチェックする必要がある for ループがあります。
ここで、2 つのオプションがあります。ループ内で、反復ごとにクエリを実行し、結果を確認します。2 番目のオプションは、必要なすべての行をフェッチすることです。for ループ内で foreach ループを実行し、目的のフィールドとループ変数の間に有効な一致があるかどうかを確認します。
説明するのは少し難しいですが、コードに語らせるだけです。ここでは、ループ内で実際のコードを使用していませんが、例として架空の関数呼び出しを使用しています。
オプション 1: 反復ごとにデータベースにクエリを実行します。
<?php
// Option 1:
for($i = 0; $i < 5; $i++)
{
$query_result = query_database_where_field_equals($i);
if($query_result)
{
echo "Here is something";
}
else
{
echo "Here is nothing";
}
}
// Option 2:
$results = query_database_and_get_all_results();
for($i = 0; $i < 5; $i++)
{
foreach($results AS $result)
{
if($result['desired_field'] == $i)
{
echo "Here is something";
}
else
{
echo "Here is nothing";
}
}
}
?>
どちらの方法でも機能しますが、パフォーマンスの観点から、ループ内でクエリを実行する方が悪い方法だと確信しています。
しかし、for ループ内で foreach ループを使用することも、私には少し奇妙に思えます。
では、これを行うための好ましい方法は何ですか?
編集 - 追加情報
数回実行する必要がある for ループがあります。量は静的 (例: 5) で、データベース内のどのレコードにも依存しません。各反復は位置を表します。
ポジションの内容に関する情報を格納するデータベース テーブルがあります。
例:
positions (id, position)
したがって、レコードの例は次のようになります: 位置 (1, 2)
つまり、位置 2 に何かがあるということです。ループで基本的にやりたいことは、その位置のレコードを取得したかどうかを確認することです。予想される出力は次のようになります。
Here is nothing
Here is nothing
Here is something
Here is nothing
Here is nothing