PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了删除空列以仅更新设置值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用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语句执行此操作.

有没有办法解决这个问题,或者您有更好的建议(我也愿意放弃使用DUPLICATE KEY)?

解决方法:

你的问题让我有些困惑.

就像它说的那样,它插入或更新,您什么都不会避免.如果要避免插入,请使用INSERT IGNORE.

如果我是你,我将分两步合并表格.

第一步,插入(只是必要的插入):

INSERT INTO finalTable (col1, col2, ...)
SELECT i.col1, i.col2
FROM importTable i 
LEFT JOIN finalTable f  ON i.ID = f.ID
WHERE f.ID IS NULL;

第二步,更新:

我不明白,为什么要删除列.不必要的步骤可能要花一些时间,最重要的是,如果列中只有几行在导入表中为NULL,则使用NULL更新的问题仍然存在.所以,这是解决方案.

updatE finalTable f
INNER JOIN importTable i ON f.ID = i.ID
SET f.col1 = COALESCE(i.col1, f.col1),
f.col2 = COALESCE(i.col2, f.col2),
...;

第二步的技巧是使用COALESCE().此函数返回其第一个不为null的参数.因此,如果导入表中的列为空,则最终表中的值将保持不变.

更新:

如果您坚持只发表一份声明,那么您当然可以

INSERT INTO final f
SELECT * FROM import i
ON DUPLICATE KEY updatE
SET f.col1 = COALESCE(i.col1, f.col1),
f.col2 = COALESCE(i.col2, f.col2),
...;

大佬总结

以上是大佬教程为你收集整理的删除空列以仅更新设置值全部内容,希望文章能够帮你解决删除空列以仅更新设置值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: