仅在某些行之间将csv导入mysql

时间:2014-04-04 01:21:23

标签: php mysql csv

我有一个csv,其中包含一系列信息,我需要加载到不同的mysql表中,有没有这样做?

表1的数据将位于第1行和第10行之间的csv顶部,并且数据标题位于A列,而数据位于B列,如下所示:

标题,数据

标题,数据

下面是表2的数据,如下所示:

航向,航向,航向,标题

数据,数据,数据,数据

数据,数据,数据,数据

数据,数据,数据,数据

有什么想法吗?

由于

3 个答案:

答案 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);
    }
    ....