2012-03-24 49 views
1

我處理從表中檢索到的數據作爲

<?php 
    $result=$mysqli->query("SELECT value1, value2 FROM table1"); 
     while($row=$result->fetch_assoc()) 
     { 
      $value1 = $row['valu1']; 
      $value2 = $row['value2']; 

      $mysqli->query("INSERT IGNORE INTO table2 (value1) VALUES ('$value1')"); 
      $result2 = $mysqli->query("SELECT id FROM table2 WHERE value1='$value1'"); 
      $row2  = $result2->fetch_assoc(); 
      $column1_id = $row2['id']; 
      $result2->close(); 

      $mysqli->query("INSERT IGNORE INTO table3 (value2) VALUES ('$value2')"); 
      $result3 = $mysqli->query("SELECT id FROM table3 WHERE value1='$value2'"); 
      $row3  = $result3->fetch_assoc(); 
      $column2_id = $row3['id']; 
      $result3->close(); 

      $mysqli->query("INSERT INTO table4 (value1,value2) VALUES ('$value1','$value2')"); 
     } 
?> 

卜問題是,子$result將弄亂與父之一,while循環將只在第一循環中工作。

回答

0

更好的應該是這樣的

insert ignore into table2 (value1) select value1 from table1; 
insert ignore into table3 (value2) select value2 from table1; 
insert ignore into table4 (value1, value2) select value1, value2 from table1 

這是優化,我覺得逼債你需要選擇ID ..和循環
(我逼債看你是使用的結果在你的例如)

+0

感謝您的建議,但這是一個簡化的版本來討論我的問題;實際的代碼更復雜,大量的php處理來自table1的值。 – Googlebot 2012-03-24 05:54:03

+0

是的,理解這一點......那麼你可以運行你想要的任何邏輯來處理數據,並將其輸出到文件中,在進程結束時執行mysql導入?你需要明確地描述你的編碼環境,我是局外人不知道你心裏在想什麼。無論如何,循環和插入一個接一個是更糟的解決方案。 – ajreal 2012-03-24 05:57:43

+0

此案並不奇怪;我有一個笨拙的數據表,我想通過在幾個表中託管數據來創建一個規範化的數據庫。在這個過程中,我想通過PHP來處理文本(如格式化)。 – Googlebot 2012-03-24 06:02:33