如何删除通过mysql_query获得的特定行结果?

时间:2009-08-04 21:16:29

标签: php mysql

我有一个mysql_query结果,我在代码的不同部分循环多次,每次使用mysql_data_seek($ result,0)重置到结果的开头。

我在这些结果上使用mysql_fetch_array,并希望从$ result中删除一些特定的行。基本上相当于unset($ result [$ row]),如果它是一个普通的数组。有没有办法做到这一点?

示例代码:

$result = mysql_query( $sql );
$num_rows = mysql_num_rows( $result );
if( $num_rows ){
    for( $a=0; $a < $num_rows; $a++ ){
    $row = mysql_fetch_array( $result );
    if( my_check_function( $row['test'] ){
                // do stuff
    } else {
            // remove this row from $result
    }
  }
}
mysql_data_seek( $result, 0 );

我知道我可以简单地取消设置($ row [$ a])来删除该特定行,但是在数据搜索之后,我在下次循环结果时会得到相同的原始结果行。

任何帮助将不胜感激。 ps - 不确定为什么在我的顶部文本中删除_并更改为斜体,我试图修复它但最终变为粗体.. :)

3 个答案:

答案 0 :(得分:7)

最好的选择是重新编写查询,这样您就不必在对数据库运行查询后删除任何记录。那,或者将你的记录插入另一个数组,只是跳过你不想要的那些。

$survivors = array();

while ($row = mysql_fetch_array($result)) { // while we have records
  if (do_something($row))                   // if this is a good record
    $survivors[] = $row;                    // save it for later
}

print_r($survivors);                        // who survived the cut?

答案 1 :(得分:2)

$result = mysql_query( $sql );
$new_rows = mysql_num_rows( $result );
$new_array = array();
if( $num_rows ){
    for( $a=0; $a < $num_rows; $a++ ){
    $row = mysql_fetch_array( $result );
    if( my_check_function( $row['test'] ){
                        // do stuff
         // populate new array with only validated data
         $new_array[$a] = $row;
    } else {
                // remove this row from $result
            // do not remove anything. 
    }
  }
}

PS。您确定无法在SQL查询中排除不必要的行吗?

答案 2 :(得分:0)

为了热爱网络,请不要自己构建SQL查询。使用PDO