问题描述
我是刚开始在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
来引用本应插入的值。