我正在使用mysql + php。php 提供了将 XLSX 商品表导入 Mysql 表的接口。我正在使用一个临时表,CREATE TABLE LIKE
即在与实时表合并之前使用实时表的空克隆进行用户评估
我习惯于INSERT INTO finalTable SELECT * FROM importTable ON DUPLICATE KEY UPDATE ....
避免INSERT
每条记录。要在重复键上更新的字段由 php 确定,SHOW COLUMNS
即临时表中的所有列。
我的问题是 XLSX 不一定包含所有字段(名称、价格、类别),即它可能只是对现有记录的更新。当前方法将更新所有字段,无论它们是否在导入期间设置,即如果 XLSX 仅包含价格更新,则其余字段为空,并将覆盖当前值。
我通过删除所有行都为空的列(不是行!)来更改临时表。这样,SHOW COLUMNS
将只返回可更新的列。如果需要将字段归零,则可以轻松设置特殊值,例如“!X!” 并使用单个UPDATE
句子来做到这一点。
有没有办法解决这个问题,或者你有什么更好的建议(我ON DUPLICATE KEY
也愿意放弃)?