2014-07-11 50 views
0

我曾經使用VBA循環通過Microsoft Access表。我使用了記錄集,然後根據我前後移動的條件或第一行。通過MySQL查詢返回和前進[PHP]

現在我正在使用MySQL和PHP。

$ qry = $ conn - > prepare(「SELECT * FROM pes」);

$ qry - > execute();

而($行= $ QRY - >取(PDO :: FETCH_ASSOC)){

 echo $row['Date'].' - ' .$row['Time']. ' - ' .$row['State']. '<br>'; 

}

我的問題是,我不能去前面和後面的這個了。我需要根據某些條件來移動查詢。

謝謝

+0

你需要一個光標倒退,和mysql的遊標是「非滾動」。你最好將數據緩存到客戶端,並在那裏「倒退」。 –

回答

1

您可以將所有的結果添加到array,然後做一個for循環中,你可以通過數字索引訪問任何行:

while ($row = $qry -> fetch(PDO::FETCH_ASSOC)) { 
    $rows[] = $row; 
} 

for ($i = 0; $i < count($rows); $i++) { 
    $row = $rows[$i]; 
    $previous = $rows[$i-1]; 
    $next = $rows[$i+1]; 
} 

唯一的問題該代碼是,並不總是前一個/下一個(第一次/最後一次迭代)。爲此,我們可以使用三元運營商在這種情況下,賦予null:

while ($row = $qry -> fetch(PDO::FETCH_ASSOC)) { 
    $rows[] = $row; 
} 

for ($i = 0; $i < count($rows); $i++) { 
    $row = $rows[$i]; 
    $previous = $i > 0 ? $rows[$i-1] : null; 
    $next = $i+1 < count($rows) ? $rows[$i+1] : null; 
} 
+0

或使用next(),prev(),reset()或其他[數組函數](http://php.net/manual/en/ref.array.php) – VMai

+0

感謝您的快速回答。但想象一下,我正在通過for循環,並且由於條件我需要檢查前面的$ i,我該怎麼做?然後我需要再次回到當前的$ i繼續循環!謝謝,你是一個很好的幫助! – user3163404

+0

如果你想在當前行再次「重新開始」,可以使用這種方法,只需減少'$ i'(在迭代已經運行之後,將其值減1以抵消它的增加)。使用'next','current'和'prev'數組函數也是在您構建數組而非for循環之後的一個選項。使用您認爲最適合的方式。 –