php - MySQL LOAD DATA INFILE 存储行号

标签 php mysql load-data-infile

我正在使用 MySQL LOAD DATA INFILE 将 CSV 文件数据移动到数据库表中。我正在寻找一种方法来引用导入记录中的原始文件行号(行)。

这样的表格:

CREATE TABLE tableName (
  uniqueId INT UNSIGNED NOT NULL PRIMARY_KEY,
  import_file VARCHAR(100),
  import_line INT,
  import_date = DATETIME,
  fieldA VARCHAR(100),
  fieldB VARCHAR(100),
  fieldC VARCHAR(100)
);

其中 import_file、import_line 和 import_date 是与特定文件导入相关的元数据。 fieldA、fieldB、fieldC 代表文件中的实际数据。

将通过如下查询进行更新:

LOAD DATA INFILE '$file' 
REPLACE
INTO TABLE '$tableName' 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATES BY '\n'
IGNORE 1 LINES # first row is column headers
(fieldA,fieldB,fieldC)
SET import_date = now(), 
import_file = '" . addslashes($file) . "', 
import_line = '???';

是否有一个我可以设置“import_line”的变量?

谢谢

-M

最佳答案

您可以通过先设置一个用户变量,然后在 SET 子句中增加该变量来实现这一点,即

SET @a:=0;                                       -- initialize the line count
LOAD DATA INFILE 'c:/tools/import.csv'           -- my test import 
REPLACE
INTO TABLE tableName 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES # first row is column headers
(fieldA,fieldB,fieldC)
SET import_date = now(), 
import_file = 'import.csv',               
import_line = @a:=@a+1;                          -- save the incremented line count

关于php - MySQL LOAD DATA INFILE 存储行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569704/

相关文章:

php - 如何获取响应 header ?

php - Laravel Eloquent 多对多如何

mysql - Yii2:如何从不同表中选择多个字段

php - 2 个 if,对插入查询有 2 个不同的返回

sql - 查找开始日期和结束日期之间的日期

mysql - 加载数据文件错误: data too short for column

php - Magento 重新索引 + 目录页面问题

php - 使用 php 设置 firebase v3 自定义身份验证

Mysql 从加载文件中的另一个表中选择