2014-06-08 73 views
0

我有一個while循環,其中包含另一個while循環。兩個循環都遍歷不同的mysql結果集。問題是第二次外部while循環調用inner while循環時,它不運行。 Mysql_fetch_row在迭代之後是否丟棄了自己?mysql_fetch_array while循環

下面是代碼看起來像什麼:

$counter = 0; 
while ($r = mysql_fetch_row($result)){ 
    $col = ""; 
    $val = ""; 
    while($d = mysql_fetch_row($dictionary)){ 
     $key = $d[0]; 
     for($i= 0; $i< count($tableColumNames); $i++){ 
      if($tableColumNames[$i] == $key){ 
       $col .= "`".$d[1]."` ,"; 
       $val .= "`".$r[$i]."` ,"; 
       /* echo $tableColumNames[$i]." table ColumnName <br>"; 
       echo $d[1]." key<br>"; */    
      }   
     } 
     echo $key."round".$counter."<br>"; 
    } 
    var_dump ($col); 
    var_dump ($val); 
    $counter++; 
    echo $counter; 
} 

這裏是輸出內容是這樣的:你可以看到,$結果包含了四個記錄和輸出顯示該循環是否正常工作。但是,$ dictionary結果集上的內部循環在第二次$ result被迭代時不會運行。任何想法爲什麼?我也嘗試使用mysql_fetch_array,但仍然是相同的結果。

感謝

enter image description here

+0

'$ dictionary'結果資源中返回了多少行?每次調用其中一個'mysql_fetch *()'函數時,結果資源的內部指針都是高級的。如果你打算一遍又一遍地使用同一行,你需要用'mysql_data_seek()'重新調用資源,但最好先將它的所有行存儲在一個數組中,然後用它循環(而不是做循環結果資源時的主要邏輯) –

+0

_BUT _...還請顯示創建這兩個結果資源的兩個查詢。這些查詢是否可以合併爲一個JOIN查詢,從而消除了許多複雜的循環邏輯? –

+0

mysql_data_seek()工作。它不會生活在一個應用程序中,我只需要一些幫助來重新組織一個數據源,並且使用php來幫助我做到這一點。所以mysql_data_seek()會很好。謝謝! –

回答

0

當過你調用mysql_fetch_row($字典)它給你的行中的特定列的詳細信息,並從$詞典陣列中刪除。

所以沒有下一次使用的元素。

而不是宣佈外部$字典聲明它在while循環。它會解決你的問題。

$counter = 0; 
while ($r = mysql_fetch_row($result)){ 
$col = ""; 
$val = ""; 
$dictionary=("Select * from database");//your own logic 
while($d = mysql_fetch_row($dictionary)){ 
    $key = $d[0]; 
    for($i= 0; $i< count($tableColumNames); $i++){ 
     if($tableColumNames[$i] == $key){ 
      $col .= "`".$d[1]."` ,"; 
      $val .= "`".$r[$i]."` ,"; 
      /* echo $tableColumNames[$i]." table ColumnName <br>"; 
      echo $d[1]." key<br>"; */    
     }   
    } 
    echo $key."round".$counter."<br>"; 
} 
var_dump ($col); 
var_dump ($val); 
$counter++; 
echo $counter; 
} 

,或者您可以使用mysql_data_seek()