如何获取一行数据并转换为多行进行mysql数据库导入

如何获取一行数据并转换为多行进行mysql数据库导入,mysql,import,spreadsheet,Mysql,Import,Spreadsheet,我已经寻找了很多答案,但还是决定去问问斯塔克福威尔的伟人 如何获取一行10列数据,并使其看起来如下所示: 0000-00-00 00:00:00 0000-00-00 00:00:00 1 3343 1 en-GB 1 15 South Peak LP 1 0 0000-00-00 00:00:00 0000-00-00 00:00:00 35 3343 1 en-GB 1 853 Del Vall

我已经寻找了很多答案,但还是决定去问问斯塔克福威尔的伟人

如何获取一行10列数据,并使其看起来如下所示:

0000-00-00 00:00:00 0000-00-00 00:00:00 1   3343    1   en-GB   1           15 South Peak LP    1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 35  3343    1   en-GB   1           853 Del Valle Dr    1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 3   3343    1   en-GB   1           Fallbrook   1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 39  3343    1   en-GB   1           CA  1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 2   3343    1   en-GB   1           92028   1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 48  3343    1   en-GB   1           San Diego   1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 5   3343    1   en-GB   1           7607231133  1   0       
现在,1行数据对应7行。 第三列表示数据的字段项编号。 第四列是特定条目的id号

原始数据行如下所示:

3343    1   68  15 South Peak LP    853 Del Valle Dr    Fallbrook   CA  92028   San Diego   7607231133
拿着这一行,做一个“转置”并不能完成上述操作。它只是将数据旋转90度。 我需要获取数据并创建7行,每行都有单独的数据

如果我可以找到一个公式,将“原始”行列D、E、F、G、H、I、J中的数据放入各自的行中,那么我可以使用其他简单公式移动其余的数据

更复杂的是,我处理的文件有550000行。这意味着将这一行分成7行将使文件接近400万行…显然,我必须减小文件大小

有人知道OpenOffice Calc中的公式可以产生上述结果吗? 或 有人知道如何使用OSD 550000行文件将数据行导入MySQL数据库中,并将其作为7行示例排列到表中吗

我可以将OSD导入其他表。但这张桌子让我困惑不解。必须有一种方法将单行数据放入数据库表中

以下是数据库中表的示例:

(`publishUp`, `publishDown`, `fid`, `sid`, `section`, `lang`, `enabled`, `params`, `options`, `baseData`, `approved`, `confirmed`, `createdTime`, `createdBy`, `createdIP`, `updatedTime`, `updatedBy`, `updatedIP`, `copy`, `editLimit`) VALUES
('0000-00-00 00:00:00', '0000-00-00 00:00:00', 35, 2348, 1, 'en-GB', 1, '', '', '133 4Th St', 1, 0, '2013-02-23 02:22:00', 854, '76.28.168.75', '2013-02-23 02:51:45', 854, '76.28.168.75', 0, 1),
('0000-00-00 00:00:00', '0000-00-00 00:00:00', 3, 2348, 1, 'en-GB', 1, '', '', 'Gonzales', 1, 0, '2013-02-23 02:22:00', 854, '76.28.168.75', '2013-02-23 02:51:45', 854, '76.28.168.75', 0, 1),
('0000-00-00 00:00:00', '0000-00-00 00:00:00', 39, 2348, 1, 'en-GB', 1, '', '', '', 1, 0, '2013-02-23 02:22:00', 854, '76.28.168.75', '2013-02-23 02:51:45', 854, '76.28.168.75', 0, 1),
('0000-00-00 00:00:00', '0000-00-00 00:00:00', 2, 2348, 1, 'en-GB', 1, '', '', '93926', 1, 0, '2013-02-23 02:22:00', 854, '76.28.168.75', '2013-02-23 02:51:45', 854, '76.28.168.75', 0, 1),
('0000-00-00 00:00:00', '0000-00-00 00:00:00', 5, 2348, 1, 'en-GB', 1, '', '', '877-616 6144', 1, 0, '2013-02-23 02:22:00', 854, '76.28.168.75', '2013-02-23 02:51:45', 854, '76.28.168.75', 0, 1),
我希望这一切都有意义,希望有人能真正弄明白这一点。
谢谢大家。

为了管理所有提取转换加载过程,我找到了有用的Pentaho数据集成应用工具。它是基于Java和开源的。您只需创建转换,选择文件或DB输入,然后对拆分字段使用转换步骤,然后使用DB输出到MySQL DB。

要使用SQL展平此结构,您可以轻松执行以下操作

select field1.sid, field1.enabled, field1.baseData, field35.baseData /* other fields...*/    

from
  (select sid, section, lang, enabled, params, options, baseData, approved, confirmed, createdTime, createdBy, createdIP, updatedTime, updatedBy, updatedIP, copy, editLimit from thetable where fid=1) field1

inner join  (select sid, section, lang, enabled, params, options, baseData, approved, confirmed, createdTime, createdBy, createdIP, updatedTime, updatedBy, updatedIP, copy, editLimit from thetable where fid=35) field35 on field35.sid = field1.sid

inner join  (select sid, section, lang, enabled, params, options, baseData, approved, confirmed, createdTime, createdBy, createdIP, updatedTime, updatedBy, updatedIP, copy, editLimit from thetable where fid=3) field3 on field3.sid = field1.sid

-- and so on for each field
1) 字段fid=1必须始终存在 2) 在编写查询之前,您需要知道字段ID,看起来您是这样做的 3) 如果不存在其他字段记录,则可以外部联接后续字段以返回“父”行


这有帮助吗?

Sambomartin-我想你已经了解了一些东西,但不是作为一名数据库程序员,我并不真正了解。在“选择”中,最重要的字段是fid,但每个条目有7个fid。我想我明白了,你只是简单地概述并告诉db,fid 1是字段1,其他人会跟着他们自己的编号,因为fid 1是字段2。我知道这对你来说似乎很简单,但我可以“看”一些东西,看看它是如何完成的,但我不能仅仅用面包屑就能看到整个画面。我知道您正在尝试运行SQL查询(对吗?)并使用您建议的内容……但我在一个文件中有500000行,需要处理的还有大约200行(每个文件至少有300000行)。您所建议的是php脚本的一部分,它可以读取CSV文件并将数据直接输入数据库?我有一个旧的脚本,在另一个表格安排中这样做了,但我不知道如何重新编写该脚本。我“已经”详细地回答了你的建议。实际上,我填写了你开始填写的字段,询问我所做的是否符合你的意思。无论出于何种原因,所有这些信息都没有被保存。简言之,那么,您是否建议我用6行内部连接、from和select代码来概括“each”条目?如果是这样,则必须对CSV文件500000行中的“每个”条目重复该操作?还是我误解了什么?不,对不起,托马斯。使用上述技术的单个查询将使您的结构扁平化。每个子查询返回每个
sid
的特定字段。外部查询通过
sid
连接字段。结果将是xxxx行
field1.sid,field1.baseData,field32.baseData,…
如果您选择在原始帖子中获取字符串,则可以将它们连接在一起。这有意义吗?这将是一个单一的查询(allbeit和几个子查询)编写一次,以返回所有的数据“展平”。Vitorek-感谢您的建议。我从未听说过这个项目,但它可能值得研究。根据您的经验,这是程序可以轻松处理的事情吗?而且,一旦转换,从该软件导入数据库需要多长时间?或者这是进口过程的一部分?软件是否只准备一个文件,然后导入?Pentaho使用java类建立数据库连接。您可以设置更多的数据库连接,并且可以在不同的步骤中访问不同的数据库。可以创建要导入的文件,但进行数据库更新也很有用。试着看看谢谢,但我不能学习一个新的程序,也不能买一个“希望”它能满足我的需要。我不想“提取”任何东西。我想导入一个已有数千个格式正确的条目的现有数据库。我负担不起用已经起作用的东西进行“实验”。是的,最好在沙箱中学习Pentaho。我建议,如果您更频繁地处理此类导入,请使用它。然而,它是直观和易于学习的。