每次迭代都附加到sql结果中

时间:2013-02-20 19:41:31

标签: mysql

下午好,我有一种情况,我需要在父循环的每次迭代后继续将MySQL结果附加到现有结果上。我正在使用的一个例子如下:

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

我希望在'while'循环的每次迭代时附加到$ result2,这样我就可以在$ result2中有一个完整的列表,以后可以处理。我怎样才能完成这项任务?

谢谢, 戴夫

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 ... loop。)时出现时处理它。

但要小心。这有可能无限循环(直到达到内存使用限制)。

编辑:更好的查询方法 - 使用IN。