2011-02-14 128 views
0
$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,應該省略......但是這給了我一些奇怪的結果......我知道我在哪裏犯了一個錯誤,但是在哪裏?這個循環有什麼問題?

回答

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; 
    } 
} 
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。

+0

OH..so簡單你是對的..我忘了LIMIT選項..很好,謝謝你 – 2011-02-14 02:52:28