2012-02-13 18 views
1

do whileループ内でデータベースに対してクエリを実行し、結果セットに追加を続ける必要がある問題を解決しようとしています。しかし、そのすべてのクエリを実行し終えたと私は、エラーに既存の結果セットに結果セットを追加する

警告結果セットのPHPを与える処理を開始すると:は、mysql_fetch_array()パラメータ1がリソースであることを期待し、 文字列が

アイデアに与えられましたそれは0,2の制限でクエリを実行し、次に2,2の制限で再度実行し、返される行の数が空になるまで続きます。私は最高の解決策は、カウントを行い、そこから解決することを知っているが、これはデータベースが大きすぎるので、これはオプションではありません。以下は

は、私は現在、あなたが提供することができます任意の助け

$tempResult = ""; 
    $i = 0; 
    $result = null; 
    do 
    { 
     if (is_resource($tempResult)) 
     { 
      echo 'Cleared Result <br />'; 
      mysql_free_result($tempResult); 
     } 
     echo 'Count: ' . $i . '<br />'; 
     $query = "select * from table_test LIMIT $i, 2"; 
     $tempResult = mysql_query($query) or die ("MySQL Error: " . mysql_error()); 
     echo 'Temp Result: ' . $tempResult .' <br />'; 
     $i = $i + 2; 
     $result .= $tempResult; 
    } while (mysql_num_rows($tempResult) > 0); 



    while ($myrow = mysql_fetch_array($result)) 
    { 
     echo $myrow['col1'] . ' + ' . $myrow['col2'] . 
' + ' . $myrow['col3'] . ' <br />'; 
} 

感謝を持っているコードです。

+2

なぜですか?とにかくすべての行をフェッチしたいのであれば、限界とループを気にするのはなぜですか?そのような面白い質問を投稿するために+1 –

+0

+1! –

+0

データベースが大きすぎてクエリを実行できないため、データベースから取得する行数を分割する必要があります。 – Boardy

答えて

0

なぜ結果配列を使用しないのですか?このような例何かについて:

$tempResult = ""; 
$i = 0; 
$resultArray = array(); 
$result = null; 
do 
{ 
    if (is_resource($tempResult)) 
    { 
     echo 'Cleared Result <br />'; 
     mysql_free_result($tempResult); 
    } 
    echo 'Count: ' . $i . '<br />'; 
    $query = "select * from table_test LIMIT $i, 2"; 
    $tempResult = mysql_query($query) or die ("MySQL Error: " . mysql_error()); 
    $resultArray = merge($resultArray, mysql_fetch_array($tempResult)); 
    echo 'Temp Result: ' . $tempResult .' <br />'; 
    $i = $i + 2; 
} while (mysql_num_rows($tempResult) > 0); 



while ($resultArray as $myRow) 
{ 
    echo $myrow['col1'] . ' + ' . $myrow['col2'] . 
' + ' . $myrow['col3'] . ' <br />'; 
} 
+1

なぜ、あなたは単一のループを使用していますか? –

0

さて、このよう珍しい質問から、私たちは正しい答えを推測することしかできません。

私の賭け:
あなたの目標は、テーブルに保存されているデータに対して計算を行うことです。
そしてデータベース機能を使って計算する適切な方法ではなく、PHPスクリプトで実行します。
したがって、1つのクエリですべての計算を行う方がよいでしょう。

とにかく、
いつもの代わりに、あなたがそれを解決することを選択したいくつかの異常な方法に関連した質問を、コア質問、根本的な問題を尋ねることをお勧めします。
これを聞くと、完全で専門的な回答が得られます。

0

最初のループで結果を印刷するだけではどうですか?

$i = 0; 
do 
{ 
    $query = "SELECT * FROM table_test LIMIT $i, 2"; 
    $result = mysql_query($query) or die("MySQL Error: " . mysql_error()); 
    while ($myrow = mysql_fetch_array($result)) 
    { 
     echo $myrow['col1'] . ' + ' . $myrow['col2'] . ' + ' . $myrow['col3'] . ' <br />'; 
    } 
    $i = $i + mysql_affected_rows(); 
} while (mysql_affected_rows() > 1); 
echo 'Count: ' . $i . '<br />'; 

実際、このメソッドは、データベースから行をフェッチするために追加のオーバーヘッドを追加する方法のように思えます。

関連する問題