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
值(并且不会将分隔符连接到 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))
请注意,您可以在 ON DUPLICATE KEY
子句中使用 VALUES()
来引用本应插入的值。
我刚开始在 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
值(并且不会将分隔符连接到 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))
请注意,您可以在 ON DUPLICATE KEY
子句中使用 VALUES()
来引用本应插入的值。