假设您有一个 CSV 文件,其中仅包含文本且行结尾为 \r\n
。
像这样:
abc
def
hij
...
xyz
您想要将此文件导入现有的多列表中,其中每一行文本都需要进入一个特定(当前为空)列(让我们将其命名为needed
)的一行 table 。像这样:
|一个 |乙| c |需要|
|foo|bar|baz|______|
<-- abc
|foo|bar|baz|______|
<-- def
...
|foo|bar|baz|______|
<-- xyz
CSV 文件中的数据不需要按特定顺序插入。 needed
的哪个字段包含 CSV 中的哪些数据并不重要,只要导入每一行,一切都很好。
我尝试了很多事情,这让我发疯,但我不知道如何做到这一点。可以使用 LOAD DATA INFILE 和更新/替换/插入命令以某种方式解决这个问题吗?遇到这样的情况你会怎么做?用mysql也可以吗?或者我需要一个自定义的 php 脚本吗?
我希望这个问题足够清楚。如果您有任何不清楚的地方,请询问。
最佳答案
好的,给你...
将新列添加到 stuff
人口数量为 1-600,000
ALTER TABLE stuff ADD COLUMN newId INTEGER UNIQUE AUTO_INCREMENT;
为您的 CSV 文件创建临时表
CREATE TABLE temp (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
data VARCHAR(32)
);
我猜测数据所需的长度。
导入到临时表
LOAD DATA INFILE <wherever> INTO TABLE temp;
将数据添加到 stuff
UPDATE stuff AS s
JOIN temp AS t ON t.id=s.newId
SET s.needed=t.data;
整理一下
DROP TABLE temp;
ALTER TABLE stuff DROP COLUMN newId;
我必须承认我还没有测试过 LOAD DATA INFILE
或UPDATE
报表,但我已经检查了所有的表摆弄。特别是,MySQL 将填充 newId
包含连续数字的列。
我认为如果 stuff
中的行数不会有问题与 csv 文件中的行数不匹配 - 显然,会有几行带有 needed
如果行数少于行数,则仍为 NULL。
关于mysql:在现有表中导入csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126438/