一次查询中的UPDATE,INSERT和ON DUPLICATE KEY UPDATE

问题描述

我是刚开始在Stack Overflow上发帖的人,所以请裸露自己。

我有一个名为Table1的表,其中的列order_id和general_notes(还有一些其他列具有更多数据)。

我正在尝试编写一个查询,该查询是:1)如果order_id还不存在,则将order_id和general_notes插入我的表中2)CONTACT UPDATE general_notes如果该列已经包含文本,并且3)UPDATE general_notes列(如果order_id已经被推送到数据库了) 。 基本上,我不希望在表中复制order_id,所以如果它不存在,我想推送两列,如果它已经存在而没有添加任何general_notes,我想添加数据,并且如果general_notes已经存在,我想要将新文本结尾。

我当前拥有的脚本将新条目添加到db,并且如果添加了其他注释,则更新了general_notes列,但是我不知道如何为数据库中已经存在的order_id更新general_notes列,也就是general_notes为NULL。 / p>

这是我目前拥有的:

$query = "INSERT INTO table1 (order_id,general_notes) VALUES(:order_id,:general_notes) ON DUPLICATE KEY UPDATE general_notes = CONCAT(general_notes,'. ',:general_notes)"; 

解决方法

我建议使用concat_ws():它会优雅地跳过null的值(并且不会将分隔符连接到null s):

INSERT INTO table1 (order_id,general_notes) 
VALUES(:order_id,:general_notes) 
ON DUPLICATE KEY UPDATE 
    general_notes = CONCAT_WS('. ',general_notes,VALUES(general_notes))

请注意,您可以在VALUES()子句中使用ON DUPLICATE KEY来引用本应插入的值。