0

こんにちは、親ループを繰り返すたびに、MySQLの結果を既存の結果に追加し続ける必要がある状況があります。私が取り組んでいるものの例は次のようになります。

while ($record = mysql_fetch_row($result,MYSQL_ASSOC)) {
   $result2 = mysql_query("SELECT * FROM Products WHERE id='".$record['target']."'");
}

'while'ループの反復ごとに$result2に追加して、後で処理できる完全なリストを$result2に含めることを検討しています。どうすればこのタスクを実行できますか?

ありがとう、デイブ

4

2 に答える 2

1

INアプリケーションの速度を大幅に低下させる可能性のある不明な量のクエリを実行する代わりに、このメソッドを使用してみませんか?そして、1つのクエリですべての結果を取得します。好き:

$ids = "";
while ($record = mysql_fetch_row($result,MYSQL_ASSOC)) {
    if( $record['target'] )
    {
        $ids .= "," . $record['target']
    }
    else
    {
        $ids = $record['target'];
    }
}
$result2 = mysql_query("SELECT * FROM Products WHERE id IN (".$ids.")");

$result2以前のすべての製品が含まれるようになりました$result;

詳しくは

  1. MySQL IN
于 2013-02-20T20:26:21.057 に答える
0

これがあなたが探しているものだと思います。

   <?
    $resultSetQueue     = Array();
    $results             = Array();
    $resultSetQueue[]    = mysqli_query("SELECT * FROM Products WHERE <Initial Criteria>");

    for($i = 0; $i < count($resultSetQueue); $i++){
        $in = "";
        while($row = mysql_fetch_assoc($resultSetQueue[$i])){
           $in                 .=  $row['target']. ",";
           $results[]           =   $row;
        }
        $resultSetQueue[]       =   mysqli_query("SELECT * FROM Products WHERE id IN (". substr($in, 0, strlen($in) - 2). ")");
?>

すべてのクエリ結果セットは結果セット キューに追加され、その時間が for($i... ループに入るときに処理されます。

ただし、注意してください。これは無期限にループする可能性があります (メモリ使用量の上限に達するまで)。

編集:より良いクエリ方法 - IN を使用します。

于 2013-02-20T20:23:02.447 に答える