Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅在某些行之间将csv导入mysql_Php_Mysql_Csv - Fatal编程技术网

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

Php 仅在某些行之间将csv导入mysql,php,mysql,csv,Php,Mysql,Csv,我有一个csv,其中包含我需要加载到不同mysql表中的一系列信息,有没有其他方法可以做到这一点 表1的数据将位于第1行和第10行之间的csv顶部,数据标题位于A列,数据标题位于B列,如下所示: 标题、数据 标题、数据 下面是表2的数据,如下所示: 标题,标题,标题,标题 数据,数据,数据,数据 数据,数据,数据,数据 数据,数据,数据,数据 有什么想法吗 谢谢您可以在单独的文件中分离数据,然后使用mysqlimport 如果你对此没有信心,那么你可以使用。它有CSV导入功能 您可以创建一个临时

我有一个csv,其中包含我需要加载到不同mysql表中的一系列信息,有没有其他方法可以做到这一点

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

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

标题,标题,标题,标题 数据,数据,数据,数据 数据,数据,数据,数据 数据,数据,数据,数据 有什么想法吗


谢谢

您可以在单独的文件中分离数据,然后使用mysqlimport


如果你对此没有信心,那么你可以使用。它有CSV导入功能

您可以创建一个临时表,将csv中的所有数据加载到此临时表中,然后根据临时表中的键(例如,行)将数据添加到您的表中

CREATE TEMPORARY TABLE tmp
(
   line int AUTO_INCREMENT PRIMARY KEY,
   field1 varchar(255),
   field2 varchar(255),
   field3 varchar(255)
);
像这样的

创建临时表

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行的数据插入到表1中

INSERT INTO table1 
SELECT field1, field2, field3 
FROM tmp
WHERE line >= 5 AND line <= 10

如果您知道需要更改表的行数,可以执行以下操作(源php.net):


如果您可以使用命令行,为什么不跳过PHP,将不同的表数据分解到它们自己的文件中,并使用
mysqlimport
?您已经收到了多个答案,其中有人帮过您吗?
...
$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);
}
....
    ...
    $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);
    }
    ....