2013-03-16 42 views
0

我有下面的代碼,這是我的工作,因爲它應該,除了事實上,它需要很長時間,在查詢完成之前?我怎樣才能讓它更快?有2條記錄大約需要1到2分鐘。php sql雖然很慢

$query2 = "SELECT COUNT(*) FROM preordertablet1"; 
$result = mysql_query($query2) or die(mysql_error()); 
$count = mysql_fetch_row($result); 
//$result=mysql_query($query) or die ("Gegevens niet kunnen ophalen uit preorder tabel. Foutmelding: ".mysql_error()); 
$c=0; 
while ($c<=$count) 
    { 
    $query="SELECT * FROM preordertablet1 WHERE ID = '$c'"; 
    $result=mysql_query($query) or die ("gegevens niet geladen uit de preordertabel, fout: ".mysql_error()); 
    while ($row=mysql_fetch_array($result)) 
     { 
     $ID1=$ID1+1; 
     $c++; 
     $naam=$row['naam']; 
     $Postcodehuisnummer=$row['Postcodehuisnummer']; 
     $datum=$row['datum']; 
     $dagen=$row['dagen']; 
     $productid=$row['productid']; 
     $subid=$row['subid']; 
     //$ID2=$ID1; 
     //gegevens in database plaatsen 
     $result=mysql_query("INSERT INTO huur (ID, ID2, status, naam, Postcodehuisnummer, datum, dagen, productid, subid) VALUES ('$ID1', '$ID2', '1', '$naam', '$postcodehuisnummer', '$huurdatum', '$aantaldagen', '$productid', '$subid')") or die ("Fout: ".mysql_error()); 
     echo 'preorder fiets toegevoegd met ID2: ', $ID2,'<br>'; 
     //$ID1=$ID1+1; 
     } 
    } 
+4

[**請不要使用'mysql_ *'功能新代碼**](http://bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 –

+0

定義「漫長的時間」。你有多少條記錄? –

+0

只有2條記錄,看起來大概需要1或2分鐘? – user2133342

回答

0

如果我們假設這是你正在運行的代碼,然後因爲你要不管通過所有的行解析多少第一次查詢是幾乎無用。所以你可以一起跳過前三行。

然後有$ c變量,除非您需要知道您通過此解析多少行也可以被取消。

然後,在第一個循環內部有查詢,「WHERE ID ='$ c'」部分很可能是導致您僅獲取一個插入行的原因。如果ID列是一個auto_increment主鍵,則第一個插入的行的值將至少爲1,但是您執行的第一個檢查是ID = 0,它不返回任何值。因此,最後一個包含兩行的表的迭代將爲ID爲1,但不能保證有任何具有該ID的行,但在您的情況下有一個,我猜測這是您看到的行你的結果。

我不會嘗試爲第二個while循環提供更正,而沒有關於諸如ID1和ID2這些列的更多信息。也許你可以發佈表定義(創建表結構)並進一步解釋一下?

正如其他人所說,不要使用mysql_函數,這些函數可以隨時從PHP中消失,因爲它們已被棄用。

所有這些當然都是基於對錶格的猜測,因爲您尚未發佈表格佈局或者您試圖實現的目標。

爲了讓您在路上有點這裏有一個簡單的代碼片段,它不是完整的,但應該給你的想法,read about PDO here

$pdo = new PDO(<insert your connection information here>); 
$selectStmt = $pdo->query('SELECT * FROM preordertablet1'); 
$insertStmt = $pdo->prepare("INSERT INTO huur 
    (ID, ID2, status, naam, Postcodehuisnummer, datum, dagen, productid, subid) 
    VALUES 
    (:ID1, :ID2, '1', :naam, :postcode, :datum, :dagen, :productid, :subid)"); 
$ID1 = 0; // Or whatever starting value you're working from. 

while ($row = $selectStmt->fetch(PDO::FETCH_ASSOC)) { 
    $ID1++; 
    $values = array("ID1" => $ID1, "ID2" => NULL, "naam" => $row['naam'], etc... 
    $insertStmt->execute($values); 
} 
+1

謝謝!現在就開始工作 – user2133342

0

$result變量正被重新用於插入操作。然後在while循環中測試$result值。

$result_insert = mysql_query("INSERT INTO huur etc etc") 
+0

現在不是一張大桌子。只是測試,目前只包含2條記錄 – user2133342

+0

循環條件應該是$ c <$ count嗎? – suspectus

+0

我只想從表中獲取所有行條目,但是當我使用SELECT * FROM preordertablet1時,它只返回1個條目,而不是兩個條目。它應該返回兩個(ID爲0和1) – user2133342