gpt4 book ai didi

mysql - 准备好的语句 : Duplicate Key Update with Where

转载 作者:行者123 更新时间:2023-11-30 22:37:11 24 4
gpt4 key购买 nike

我有这些表:

stundenplan
+----+---------+-------+--------+---------+---------+------+
| id | user_id | tag | stunde | fach | lehrer | raum |
+----+---------+-------+--------+---------+---------+------+
| 1 | 1 | 1 | 1 | MATH | SM | 101 |
| 2 | 1 | 1 | 2 | MATH | SM | 101 |
| 3 | 1 | 1 | 3 | MATH | SM | 101 |
| 4 | 1 | 1 | 4 | MATH | SM | 101 |
| 5 | 1 | 1 | 5 | MATH | SM | 101 |
| 6 | 1 | 1 | 6 | MATH | SM | 101 |
| 7 | 1 | 2 | 1 | MATH | SM | 101 |
| 8 | 1 | 2 | 2 | MATH | SM | 101 |
| .. | ... | ... | ... | ... | ... | ... |

users
+---------+----------+----
| user_id | username | ...
+---------+----------+----
| 1 | User1 | ...
+---------+----------+----

我的查询(这对我来说没有意义,因为更新部分缺少 user_id):

$sql = $db->prepare("
INSERT INTO stundenplan
(tag, stunde, user_id, fach, lehrer, raum )
VALUES
(?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
fach = VALUES(fach),
lehrer = VALUES(lehrer),
raum = VALUES(raum)
");
$sql->bind_param('iiissi', $input_tag, $input_stunde, $input_fach, $input_lehrer, $input_raum);

如果我必须插入一些东西,查询将是这样的:

INSERT INTO stundenplan (tag, stunde, user_id, fach, lehrer, raum) VALUES (?, ?, ?, ?, ?, ?)

如果我必须更新查询将是这样的:

UPDATE stundenplan SET fach = ?, lehrer = ?, raum = ? WHERE user_id = ?

如何将这两个查询合并为一个,就像我以前尝试过的那样?

最佳答案

我只在 SQL 部分做了它(你的查询是正确的,但我通过 user_id 扩展了键):

    INSERT INTO stundenplan
(tag, stunde, user_id, fach, lehrer, raum )
VALUES
(1,1,1,'MATH_NEW','SM',101)
ON DUPLICATE KEY UPDATE
fach = VALUES(fach),
lehrer = VALUES(lehrer),
raum = VALUES(raum);

请查看下面的演示。它在模式构建部分使用 ON DUPLICATE KEY UPDATE 并在插入时使用静态值(在 1,1,1 值上重复)。执行 select 语句后,您可以看到值已正确更新。

DEMO HERE

问题是您无法修改此查询中的 UPDATE 条件(它们与检测到的重复项完全相同)。所以可能的解决方案很少,都包含 2 个查询和事务:

  • stundenplan 中删除重复行并重新插入
  • 插入不重复的行,然后更新重复行。

我还找到了一篇关于花式插入/更新的不错的文章 HERE

关于mysql - 准备好的语句 : Duplicate Key Update with Where,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32210052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com