我正在寻找一个示例,说明如何在一个表的字段中拆分逗号分隔的数据,并使用这些单独的元素填充第二个表,以便创建一个一对多的关系数据库模式。这可能真的很简单,但让我举一个例子:
我将从一个表小部件中的所有内容开始,它有一个"state“字段,其中包含有该小部件的状态:
表:小部件
===============================
| id | unit | states |
===============================
|1 | abc | AL,AK,CA |
-------------------------------
|2 | lmn | VA,NC,SC,GA,FL |
-------------------------------
|3 | xyz | KY |
===============================现在,我想通过代码创建第二个表,该表被连接到名为Widget_ST的小部件,该小部件具有小部件id、小部件状态id和小部件状态名称字段。
表: WIDGET_ST
==============================
| 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,所以这两种语言的反应都很好。
谢谢。
发布于 2010-06-17 17:02:59
我编写了一些脚本将Stack溢出数据转储导入SQL数据库。如您所述,我将标记列表拆分为填充多到多表。我使用一种类似于以下方法的技术:
explode()在逗号上拆分
$states =爆发( ",“,$row”状态“);这看起来可能需要做很多工作,但是使用LOAD DATA命令比一次插入一行快20倍,所以如果数据集很大,就值得使用。
关于你的评论:
对,我已经在数据库里有数据了。事实证明,我上面展示的解决方案,即将CSV文件转储到CSV文件并以规范化格式重新导入,的速度比在循环中拆分数据的插入语句快很多倍。
每个品牌的数据库都有自己的导入大容量数据的工具。有关每个数据库的批量导入解决方案的列表,请参见我对优化PHP中的大导入的回答。
您应该使用每个数据库提供的工具。试图保持跨平台只会使您的代码百艺不如一艺精。此外,在90%的情况下,当人们弯腰使他们的代码数据库独立时,事实证明他们从未使用过一个以上的数据库。无论如何,你也无法实现完全的数据库独立。
https://stackoverflow.com/questions/3063700
复制相似问题