这可能是一个愚蠢的问题,但我似乎无法在谷歌上找到答案或以编程方式创建一个。我有一个名为contacts2.csv(逗号分隔)的巨大CSV文件,我想将其导入MySQL数据库。现在最棘手的部分是我已经在数据库中有一堆字段,我想将数据放入,但它们与CSV不匹配。
例如,第一列可能是CSV上的“公司”,但它实际上是MySQL上的第5列。我还有一个自动增量“id”列,目前位于129483653,我希望在导入时保持自动递增。
我在网上发现了一些脚本来显示数据并导入到新表中,但我需要将所有这些记录添加到现有表中而不会覆盖任何内容。
谢谢
我使用了CSV到MySQL的转换器,并为我的输出得到了这个:
CREATE TABLE `tempcontacts` (
`company` varchar(255) NOT NULL DEFAULT '',
`contact` varchar(255) NOT NULL DEFAULT '',
`address_1` varchar(255) NOT NULL DEFAULT '',
`city` varchar(255) NOT NULL DEFAULT '',
`state` varchar(255) NOT NULL DEFAULT '',
`zip` varchar(255) NOT NULL DEFAULT '',
`phone` varchar(255) NOT NULL DEFAULT '',
`fax` varchar(255) NOT NULL DEFAULT '',
`title` varchar(255) NOT NULL DEFAULT '',
`phone_ext_` varchar(255) NOT NULL DEFAULT '',
`web_site` varchar(255) NOT NULL DEFAULT '',
`e_mail` varchar(255) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `tempcontacts` VALUES
('Construction', 'Bill Billy', '4201 State Route 1', 'Orlando', 'FL', '11111', '312-922-2125', '', '', '235', 'www.construction.com', ''),
这不能仅仅以某种方式切换到我的实际表格“联系人”的“插入”命令吗?
更新:我想我可能需要有人帮我写一些自定义的内容才能完成所有这些工作。我试过了:
http://www.codewalkers.com/c/a/Database-Code/PHP-CSV-Importer-20/
http://www.geeklog.net/forum/viewtopic.php?showtopic=71161
其他来源。
答案 0 :(得分:2)
我认为您最好的选择是将您的mysql表重新排序为您的csv文件顺序。然后按照您想要的顺序重新排序mysql表。 这是一个蠢货的工作。 即使你弄乱了订单,一切都是var(255)所以你可以重命名列
编辑:
只要您的行具有正确的顺序,以便1位于第1行,2位于第2行等。 并且您的列的顺序正确:您的csv中的公司,联系人,地址_1等与您的表匹配,那么您只需使用数据Infile脚本
http://dev.mysql.com/doc/refman/5.0/en/load-data.html
我必须导入csv文件的示例:
LOAD DATA INFILE '/usr/name/file.csv' INTO TABLE `mytable`
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
然后只需使用auto_increment
添加列主键我之所以使用这个是因为某人有一张带有一堆东西的excel表,我需要将其导入数据库一次。 我仍在使用数据库学习所有内容,因此如果您将其作为例程脚本,我不知道是否存在安全风险。
编辑:
使用http://dev.mysql.com/doc/refman/5.0/en/load-data.html
中的一个示例LOAD DATA INFILE '#{DATA_FILE_NAME}' IGNORE
INTO TABLE zipcodes
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'
(city, state_code, @zip, area_code, county_fips, county_name, @preferred, timezone,
dst, lat, lon, msa, pmsa, @city_abbreviation, ma, zip_type)
要执行此操作,CSV文件中的所有行(行)都应遵循相同的模式。所以说:公司,所有者,名称,头衔,地址的顺序,然后硬输入(\ n)
所以看起来应该是
PharmacyPlace, 2222, Bob Pills, Pharmacists Awesome Man, 51 Main st
Walmart, 12331, Anna Smith, Manager, 99 main st
保持相同的模式
如果你有一条任何其他方式的线路,那么你将不得不解决这个问题 但如果你有:
Taco Bell,,,Manager, 59 Main st
然后每个逗号都会告诉它转到下一列。
因此,此示例的脚本将上传到您的数据库
LOAD DATA INFILE 'DATA_FILE_NAME' INTO TABLE `your table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(company, ownerid, name, title, address);
我会首先备份你的表,然后将它复制到另一个表作为临时测试这个全部。你将不得不进行一些试验和错误。就像我说的一个潇洒的解决方案。
答案 1 :(得分:1)
一个人每周十几次来这条路的话。导入临时表并使用SQL引擎或PHP脚本从中找出它的优点远远超过了尝试匹配/映射和希望的悲痛。早些时候回答here。只是我的意见,我可能错了。
使用您编辑过的问题:该转换器生成了一个INSERT语句,您可以修改这样的内容。将表更改为最终表,并将显示的列名调整为最终表中的实际列,而不更改其顺序(列名必须与下面的数据顺序相同,但不必如此与表结构中的顺序相同)
INSERT INTO `contacts`
(`company`, `contact`, `address_1`, `city`, `state`, `zip`, `phone`, `fax`, `title`, `phone_ext_`, `web_site`, `e_mail`)
VALUES
('Construction1','Bill Billy','4201 State Route 1','Orlando','FL','11111','312-922-2125','','','235','www.construction.com',''),
('Construction2','Bill Billy','4201 State Route 1','Orlando','FL','11111','312-922-2125','','','235','www.construction.com','');