我有一个关于导入长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
组成我不明白如何在不将查询返回到父表的情况下再次将id拉回来,因为我将数据输入到子表中
答案 0 :(得分:1)
您可以使用PDO::lastInsertId
或mysqli::$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(), ...)
但我自己从未尝试过。