mysql为一个以终止的csv字段加载数据本地infile,并为另一个以

时间:2017-06-08 07:49:10

标签: php mysql csv

我已经写了一个我在这里发布的查询,但是它正在使用类似的csv.I需要一个加载数据本地infile查询,它将适用于所有类型的csv文件。请查看它。

以下查询适用于所有类型的csv文件,其中的字段用,分隔。 示例csv

1,114300,1790,2,2,2,No,East
2,114200,2030,4,2,3,No,East
3,114800,1740,3,2,1,No,East
4,94700,1980,3,2,3,No,East

查询如下所示:

 LOAD DATA    LOCAL  INFILE '$pathname'
              IGNORE INTO TABLE $name
              FIELDS TERMINATED BY ','
              OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"'
              LINES TERMINATED BY '\\n'
              IGNORE 1 LINES"

另一个csv就像这样

Agfa ePhoto 1280;1997;1024.0;640.0;0.0;38.0;114.0;70.0;40.0;4.0;420.0;95.0;179.0
Agfa ePhoto 1680;1998;1280.0;640.0;1.0;38.0;114.0;50.0;0.0;4.0;420.0;158.0;179.0
Agfa ePhoto CL18;2000;640.0;0.0;0.0;45.0;45.0;0.0;0.0;2.0;0.0;0.0;179.0
Agfa ePhoto CL30;1999;1152.0;640.0;0.0;35.0;35.0;0.0;0.0;4.0;0.0;0.0;269.0
Agfa ePhoto CL30 Clik!;1999;1152.0;640.0;0.0;43.0;43.0;50.0;0.0;40.0;300.0;128.0;1299.0

在查询中我刚刚将字段以','更改为';'。它适用于我。我需要在一个查询中完成所有工作。我正在寻求帮助。

1 个答案:

答案 0 :(得分:1)

我提取了csv文件名及其路径,并将其存储在名为$ filename。

的变量中
$file = new SplFileObject($filename);//it holds the name and location means path to csv
$file->seek(0);//It holds the first line of csv
if (strpos($file, ';') == true){

$field = "FIELDS TERMINATED BY ';'";
 }
if (strpos($file, ',') == true){
 $field = "FIELDS TERMINATED BY ','";
 }

然后像这样编辑查询

LOAD DATA    LOCAL  INFILE '$pathname'
              IGNORE INTO TABLE $name
              $field
              OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"'
              LINES TERMINATED BY '\\n'
              IGNORE 1 LINES"

它适用于所有csv文件,哪些字段以及;。