转换大量数据导入

时间:2013-02-14 14:05:21

标签: php mysql

我有一个关于导入长csv表然后转换为两个表以提高效率的最佳方法的问题。 这是一个非常小规模的版本,但为此目的适合:

每一行都是唯一的记录,但前三列包含大量行的非常一致的数据。

我认为管理这些数据的最佳方法是构建两个表:

第一个是自动增量id字段和前三列的分组。

这为我的数据的主要分组提供了一个很好的紧凑表格。

第二个表是每一行,但不是保留所有重复数据,而是只保存变量数据列d,e和f以及导入第一个表时生成的自动增量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     选择null,a,b,c     从表     分组由a,b,c

组成
  1. 我的子表,它是我的所有数据行,但包含来自父表的相应自动增量ID。
  2. 我不明白如何在不将查询返回到父表的情况下再次将id拉回来,因为我将数据输入到子表中

1 个答案:

答案 0 :(得分: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(), ...)

但我自己从未尝试过。

相关问题