php - MySQL根据第一行加载数据
问题描述
有没有办法从 CSV 文件中加载数据,其中第一行是列名,其他行是数据?
我尝试了简单的查询,但它插入时没有任何排序
询问 :
$q = "LOAD DATA LOCAL INFILE '".$filepath.$filename_update."'
INTO TABLE ".$dbName.$tableName."_uimport_update
FIELDS TERMINATED BY ';'
ENCLOSED BY '\"'
IGNORE 1 LINES;";
数据库列
product_id, product_sku, ...
CSV 文件
mdate, product_sku, ....
结果不好:
product_id, product_sku, ...
mdate, product_sku, ....
想要的结果:
product_id, product_sku, ...
product_id, product_sku, ....
解决方案
您可以指定查询中列的顺序。我建议在查询中添加一个字符集,并为附件添加一个“可选”。
但是让我们看一下:
CREATE TABLE `foo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`bar` varchar(255) DEFAULT NULL,
`baz` varchar(255) DEFAULT NULL,
`bla` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
vagrant@fancyhost:~$ cat foo.csv
酒吧;baz;bla
“测试 bndg”;baaaaaaaaaaaaz;“yeyo”
“我 looooooove 虚拟数据”;调试;虚拟
测试1;测试2;测试3
mysql> LOAD DATA INFILE '/home/vagrant/foo.csv' INTO TABLE foo CHARACTER SET utf8 FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' IGNORE 1 LINES (bar,baz,bla)
-> ;
Query OK, 3 rows affected (0.01 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM foo;
+----+-------------------------+----------------+-------+
| id | bar | baz | bla |
+----+-------------------------+----------------+-------+
| 1 | test bndg | baaaaaaaaaaaaz | yeyo |
| 2 | I looooooove dummy data | debug | dummy |
| 3 | test1 | test2 | test3 |
+----+-------------------------+----------------+-------+
3 rows in set (0.00 sec)
mysql> LOAD DATA INFILE '/home/vagrant/foo.csv' INTO TABLE foo CHARACTER SET utf8 FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' IGNORE 1 LINES (bar,bla,baz)
-> ;
Query OK, 3 rows affected (0.01 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM foo;
+----+-------------------------+----------------+----------------+
| id | bar | baz | bla |
+----+-------------------------+----------------+----------------+
| 1 | test bndg | baaaaaaaaaaaaz | yeyo |
| 2 | I looooooove dummy data | debug | dummy |
| 3 | test1 | test2 | test3 |
| 4 | test bndg | yeyo | baaaaaaaaaaaaz |
| 5 | I looooooove dummy data | dummy | debug |
| 6 | test1 | test3 | test2 |
+----+-------------------------+----------------+----------------+
6 rows in set (0.00 sec)
您可以根据您的示例轻松更改订单:)
推荐阅读
- wordpress - 如何将大型 SQL DB 文件上传到 myphpadmin?(在 Synology 服务器上使用 MariaDB 10.3.7、Innodb、PHP 7.2)
- android - 文件“root/AndroidManifest.xml”使用保留文件或目录名称“AndroidManifest.xml”
- c# - 多个流
- angular - ng build 是否避免 node_modules 代码重复?
- documentation - 记录功能测试
- powershell - 使用 cmd 或 powershell 从文件中删除字符/字符串
- dialogflow-es - 在为组织创建 Google Action 之前,我们应该获得哪些付费帐户和订阅?
- laravel-5 - 在 laravel 中每五分钟运行一次计划(如 00:05、00:10...)
- python - 如何用 python 创建这个 JSON 数组?
- html - 我怎样才能像我发送的图像一样制作页眉和页脚..?