每24小时,我必须将更新的csv文件中的1行或更多行添加到我的表数据中。 我在我的php文件中尝试过这个查询:
TRUNCATE TABLE mytable;
然后使用此查询(PDO)插入新的
INSERT INTO mytable VALUES(:date,:data1,:data2,:data3,:data4,:data5)
它的工作,但页面需要永远加载。
是否有任何解决方案来更新我的表,忽略旧的并从更新的csv文件中添加新行而不是TRUNCATE
和INSERT
整个数据?
提前致谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
使用LOAD DATA INFILE将内容从csv文件传输到db表的非常快的MySQL方式。
LOAD DATA INFILE "<path-to>/yourfile.csv"
REPLACE
INTO TABLE <db-name>.<table-name>
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(col1, col2, col3);
让它从PHP执行。
备注强>:
IGNORE 1 LINES
。FIELDS TERMINATED BY ','
和LINES TERMINATED BY '\n'
描述了如何在csv文件中形成输入字段和行。自定义它们以适合您的文件内容的形式。(col1, col2, col3)
,定义了应在其中传输输入值的列。由于未定义主键或唯一索引列,因此不会更新任何记录。将只有插入操作。现在在列表中添加一个PRIMARY KEY列(让我们说它名为ID_COL
)。或者定义了UNIQUE索引的那个:
LOAD DATA INFILE "<path-to>/yourfile.csv"
REPLACE
INTO TABLE <db-name>.<table-name>
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(ID_COL, col1, col2, col3);
然后,如果db记录的ID_COL
值与相应的csv输入值相等,则记录将被更新。例如。旧值将被替换 - 这是关键字REPLACE
的用途。否则将插入一个新的。
耐心阅读LOAD DATA INFILE文档,以便您了解此方法涉及的所有方面。特别是在第二部分中,描述了使用变量自定义更新/插入值的详细信息。
祝你好运!我昨天写了an answer,你可能会对此感兴趣(关于有条件的csv上传)。