UPDATE、INSERT 和 ON DUPLICATE KEY UPDATE 在一个查询中

UPDATE, INSERT and ON DUPLICATE KEY UPDATE in one query

我刚开始在 Stack Overflow 上发帖,所以请多多包涵。

假设我有一个名为 Table1 的 table,其中包含 order_id 和 general_notes 列(以及其他一些具有更多数据的列)。

我正在尝试编写一个查询 1) INSERT order_id and general_notes INTO my table if order_id does not exist yet 2) CONTACT UPDATE general_notes 如果列已经包含文本和 3)UPDATE general_notes 列如果 order_id 已经被推送到数据库。 基本上我不希望 order_id 在我的 table 中重复,所以如果它不存在我想推送两列,如果它已经存在但没有任何 general_notes添加我想添加数据,如果 general_notes 已经存在我想将新文本连接到最后。

我目前的脚本添加了新条目到 db 并更新了 general_notes 列(如果添加了额外的注释)但我不知道如何为 [=] 更新 general_notes 列23=] 已经在数据库中又名 general_notes 是 NULL。

这是我目前拥有的:

$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 值(并且不会将分隔符连接到 nulls):

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))

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