我有这些表格:
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 = ?
如何将这两个查询组合成我之前尝试过的查询?
答案 0 :(得分:0)
我只在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
语句后,您可以看到值已正确更新。
问题是您无法修改此查询中的UPDATE
条件(它们与检测到的重复项完全相同)。所以几乎没有可能的解决方案,都包含2个查询和事务:
stundenplan
删除重复的行并重新插入我还找到了一篇关于花式插入/更新HERE
的文章