这个循环有什么问题?

时间:2011-02-14 02:45:30

标签: php mysql

$result  = mysql_query($query);
$filter = array(); 
while($r = mysql_fetch_array($result)) 
{ 
   for ( $i = 0; $i<20; $i++)
   {  
      $filter[] = $r["name"][$i]; 
   }
   $name = implode(",", $filter); 
}

以上是主要代码的一部分。我想限制循环只运行20次。如果超过20,它应该省略...但这给了我一些奇怪的结果......我知道我犯了什么错误但在哪里?

2 个答案:

答案 0 :(得分:3)

mysql_fetch_array仅从查询结果中提取单行数据。看起来你试图从结果中只获取一个字段,所以你需要这样的东西:

$i = 0;
while($row = $mysql_fetch_assoc($result)) {
   $i++
   if ($i >= 20) {
      break;
   }
   $filter[] = $row['name'];

}
$name = implode(",", $filter);

但这是非常低效的。为什么不让MySQL自己进行行限制?

SELECT your,fields,here
FROM yourtable
WHERE ...
ORDER BY ...
LIMIT 20

然后你只需要20行开始,而不是强迫mysql获取所有 - 然后很多 - 超过20。

答案 1 :(得分:1)

你没有进入下一行

$result  = mysql_query($query);
$filter = array(); 
$i = 0;
while($r = mysql_fetch_array($result)) 
{ 

    $filter[] = $r["name"][$i]; }
    $name = implode(",", $filter); 
    if(++$i == 20)
    {
        break;
    }
}