首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于解析CSV表值以填充一对多表的PHP或C#脚本。

问用于解析CSV表值以填充一对多表的PHP或C#脚本。
EN

Stack Overflow用户
提问于 2010-06-17 16:46:10
回答 1查看 280关注 0票数 2

我正在寻找一个示例,说明如何在一个表的字段中拆分逗号分隔的数据,并使用这些单独的元素填充第二个表,以便创建一个一对多的关系数据库模式。这可能真的很简单,但让我举一个例子:

我将从一个表小部件中的所有内容开始,它有一个"state“字段,其中包含有该小部件的状态:

表:小部件

代码语言:javascript
复制
===============================
| id | unit | states          |
===============================
|1   | abc  | AL,AK,CA        |
-------------------------------
|2   | lmn  | VA,NC,SC,GA,FL  |
-------------------------------
|3   | xyz  | KY              |
===============================

现在,我想通过代码创建第二个表,该表被连接到名为Widget_ST的小部件,该小部件具有小部件id、小部件状态id和小部件状态名称字段。

表: WIDGET_ST

代码语言:javascript
复制
==============================
| w_id | w_st_id | w_st_name |
------------------------------
|1     | 1       | AL        |
|1     | 2       | AK        |
|1     | 3       | CA        |
|2     | 1       | VA        |
|2     | 2       | NC        |
|2     | 1       | SC        |
|2     | 2       | GA        |
|2     | 1       | FL        |
|3     | 1       | KY        |
==============================

我正在学习C#和PHP,所以这两种语言的反应都很好。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-17 17:02:59

我编写了一些脚本将Stack溢出数据转储导入SQL数据库。如您所述,我将标记列表拆分为填充多到多表。我使用一种类似于以下方法的技术:

  1. 从小部件读取一行 时间($row = $pdoStmt->fetch()) {
  2. 使用explode()在逗号上拆分 $states =爆发( ",“,$row”状态“);
  3. 循环遍历元素,写入新的CSV文件 $stateid =数组();$stfile = fopen("states.csv","w+");$mmfile = fopen("manytomany.csv","w+");$i = 0;foreach ($state as $st) { if (!array_key_exists($st,$stateid)) { $stateid$st = ++$i;fprintf($stfile,"%d,%s\n",$i,$stfile);}fprintf(++$i,"%s,%s\n",“id”,);} fclose($stfile);
  4. 完成后,将CSV文件加载到数据库中。您可以在mysql客户机中这样做: mysql>将数据信息“states.csv”加载到表状态;mysql>将数据信息“manytomany.csv”加载到表WIDGET_ST;

这看起来可能需要做很多工作,但是使用LOAD DATA命令比一次插入一行快20倍,所以如果数据集很大,就值得使用。

关于你的评论:

对,我已经在数据库里有数据了。事实证明,我上面展示的解决方案,即将CSV文件转储到CSV文件并以规范化格式重新导入,的速度比在循环中拆分数据的插入语句快很多倍。

每个品牌的数据库都有自己的导入大容量数据的工具。有关每个数据库的批量导入解决方案的列表,请参见我对优化PHP中的大导入的回答。

您应该使用每个数据库提供的工具。试图保持跨平台只会使您的代码百艺不如一艺精。此外,在90%的情况下,当人们弯腰使他们的代码数据库独立时,事实证明他们从未使用过一个以上的数据库。无论如何,你也无法实现完全的数据库独立。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3063700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档