3

何が速いのか自問自答していました。ループ変数に対して特定のテーブル列をチェックする必要がある 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
4

3 に答える 3

1

2 番目のオプションは、与えられた 2 つのオプションの中で望ましいものですが、ループしてクエリを実行しているものについて正確な情報を知っていると、より良い答えを得るのに役立つ場合があります。

于 2013-06-19T16:03:58.947 に答える
1

ない。

を使用して、ループをクエリに入れる必要がありますWHERE field IN (0, 1, 2, 3, 4)

于 2013-06-19T16:02:06.933 に答える