2009-08-04 60 views
3

我有一个mysql_query结果,我在代码的不同部分多次循环,每次使用mysql_data_seek($ result,0)重置为结果的开始。如何删除通过mysql_query获取的特定行结果?

我对这些结果使用了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); 

我知道我可以简单地做复位($行[$一])来去除特定行,但之后的数据寻求并通过成果我循环下一次我结束与原始结果行相同。

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

回答

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? 
+0

好的,谢谢,那就是我最终做的。我很好奇,如果有一种方法可以直接改变mysql_query的结果本身,不要猜测:) – Rob 2009-08-05 01:22:22

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查询中排除不必要的行吗?

0

请为网络的爱,不要自己建立一个SQL查询。使用PDO