我有一个csv,其中包含一系列信息,我需要加载到不同的mysql表中,有没有这样做?
表1的数据将位于第1行和第10行之间的csv顶部,并且数据标题位于A列,而数据位于B列,如下所示:
下面是表2的数据,如下所示:
有什么想法吗?
由于
答案 0 :(得分:0)
您可以将数据分开,然后使用mysqlimport。
如果您对此没有信心,那么您可以使用MySqlWorkBench。它有CSV导入工具。
答案 1 :(得分:0)
您可以创建一个临时表,将csv中的所有数据加载到此临时表中,并根据临时表中的键(例如行)从那里添加到表中。
像这样。
创建临时表。
CREATE TEMPORARY TABLE tmp
(
line int AUTO_INCREMENT PRIMARY KEY,
field1 varchar(255),
field2 varchar(255),
field3 varchar(255)
);
加载数据。
LOAD DATA LOCAL INFILE 'file.txt' INTO TABLE tmp
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(@field1, @field2, @field3)
SET field1 = @field1,
field2 = @field2,
field3 = @field3;
因此,如果要将第5行到第10行的数据插入到table1中。
INSERT INTO table1
SELECT field1, field2, field3
FROM tmp
WHERE line >= 5 AND line <= 10
将其余行添加到另一个表
INSERT INTO table2
SELECT field1, field2, field3
FROM tmp
WHERE line > 10
答案 2 :(得分:0)
如果您知道想要更改表格的行数,您可以执行类似的操作(源代码php.net):
...
$table_one_data = array();
$table_two_data = array();
$row = 0;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$row++
if ($row < 1000) {
array_push($table_one_data, $data);
} else {
array_push($table_two_data, $data);
}
}
fclose($handle);
}
....
您也可以通过CSV文件中的数据触发此操作:
...
$table_one_data = array();
$table_two_data = array();
$field = 0;
$trigger = "table2";
$tableChange = false;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($data[field] == $trigger) {
tableChange = true;
}
if (!$tableChange) {
array_push($table_one_data, $data);
} else {
array_push($table_two_data, $data);
}
}
fclose($handle);
}
....