我是新來的整個PHP/MySQL的東西。我有一週的服務器日誌(約300,000項),我需要做一些分析。我打算將它們全部讀入一個mysql數據庫,然後用php進行分析。PHP/MYSQL:遍歷數據庫中的每條記錄
我不確定的事情是如何迭代它們。使用java讀取文件我會做這樣的事情:
Scanner s = new Scanner(myfile);
while(s.hasNext()){
String line = s.nextLine();
~~ Do something with this record.
}
如何使用PHP迭代MySQL數據庫中的所有記錄?我認爲這樣的事情會佔用一些愚蠢的內存。
$query = "SELECT * FROM mytable";
$result = mysql_query($query);
$rows = mysql_num_rows($result);
for($j = 0; $j < $rows; ++$j){
$curIndex = mysql_result($result,$j,"index");
$curURL = mysql_result($result,$j,"something");
~~ Do something with this record
}
所以我增加了一個限制選擇語句,我重複,直到所有記錄已經循環。有沒有更標準的方法來做到這一點?有沒有內置的,會做到這一點?
while($startIndex < $numberOfRows){
$query = "SELECT * FROM mytable ORDERBY mytable.index LIMIT $startIndex,$endIndex";
$result = mysql_query($query);
$rows = mysql_num_rows($result);
for($j = 0; $j < $rows; ++$j){
$curIndex = mysql_result($result,$j,"index");
$curURL = mysql_result($result,$j,"something");
~~ Do something with this record
}
$startIndex = $endIndex + 1;
$endIndex = $endIndes + 10;
}
這不會使用瘋狂的內存量嗎?這是否有一些基本的方法來獲取需要的東西? – sixtyfootersdude 2010-11-11 14:34:57
任何過濾器都應該應用到底層的SQL,SQL語句應該只產生所需的記錄,然後PHP會爲您的目的迭代,如果您有大數據集,請考慮使用單獨的'頁面' – SW4 2010-11-11 14:46:05
Re:內存,如果你需要使用所有返回的記錄(如果你沒有,然後調整你的SQL),這些都是內置的PHP函數,所以可能是最好的方法 – SW4 2010-11-11 14:47:03