2013-02-14 59 views
0

我有一個問題,最好的辦法是導入一個長的csv表,然後轉換爲兩個表以提高效率。 這是一個非常縮小的版本,但爲此目的適合:轉換大量進口數據

每行是一個唯一的記錄,但前三列包含大量行的非常一致的數據。

我想通來管理這些數據的最佳方式是建立兩個表:

第一個是一個自動遞增ID字段和一組由前三列。

這給出了我的數據的主要分組不錯的緊湊表。

第二個表是每一行,但不是保存所有重複的數據,而是隻保存變量數據列d,e和f以及導入到第一個表時生成的autoincrement id字段。

我的問題是如何從第一個表中獲取id - 是我重新查找該表以找到該id並然後插入到第二個表中的唯一方法?

a,b,c,d,e,f 

09/02/2013,A1,1,18503112043123,11,2.1219 
09/02/2013,A1,1,44102576116476,73,14.0817 
09/02/2013,A1,1,66918345446536,134,25.8486 
09/02/2013,A1,2,62009507978229,10,1.929 
09/02/2013,A1,2,92278593945574,55,10.6095 
09/02/2013,B1,1,50474606002324,90,17.361 
09/02/2013,B1,1,59697581427675,7,1.3503 
09/02/2013,B1,1,86298530583467,51,9.8379 
09/02/2013,B1,2,34885481077847,80,15.432 
09/02/2013,B1,2,25479347211047,164,31.6356 
09/02/2013,B1,3,56270556524425,6,1.1574 
09/02/2013,C1,1,57680166803098,24,4.6296 
09/02/2013,C1,1,72778510788287,77,14.8533 
09/02/2013,C1,1,26084111080146,140,27.006 
09/02/2013,C1,1,31435464483578,361,65.5937 
09/02/2013,C1,2,29457756254473,492,89.3964 
09/02/2013,C1,2,68414218104066,293,53.2381 

編輯

我心裏有兩個查詢: 1:它由一個具有自動增量 插入到parent_table 選擇空,A,B,C 從表 組我的父表,b,c

  1. 我的孩子表,這是我所有的數據行,但包括父表中相應的自動遞增ID。

我不知道如何再次拉ID而不做查詢回父表,因爲我輸入數據到子表

回答

1

您可以使用PDO::lastInsertIdmysqli::$insert_id檢索

在上次查詢中使用的自動生成的ID。

只是做插入,然後取ID

$sth = $pdo->prepare("insert into first_table (a, b, c) values (?, ?, ?)"); 
$sth->execute(array('2013-02-09', 'A1', 1)); 
$id = $pdo->lastInsertId(); 

還有MySQL的LAST_INSERT_ID()。你可以測試

insert into second_table (first_table_id, d, e, f) values (LAST_INSERT_ID(), ...) 

但我從來沒有嘗試過這個我自己。

+0

好的 - 所以我最好的方法是通過php而不是直接在mysql中執行此操作。 這意味着循環遍歷數據行不是 – user1479891 2013-02-14 14:19:58

+0

@ user1479891還有mysql的'last_insert_id()',請查看更新後的答案。 – 2013-02-14 14:25:42