将结果集添加到现有结果集

时间:2012-02-13 10:43:05

标签: php mysql

我正在尝试解决一个问题,我需要在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 />';
}

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分: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脚本中执行此操作,而不是使用数据库工具进行计算的正确方法 因此,最好在一个查询中进行所有计算。

反正
询问核心问题是一个根本问题,而不是与您选择解决它的一些不寻常方式相关的问题,这总是一个好习惯。
一旦你问这个,你将获得完整和专业的答案。

答案 2 :(得分: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 />';

但实际上,这种方法似乎是一种增加额外开销以从数据库中获取行的方法。