gpt4 book ai didi

php - "INSERT...ON DUPLICATE KEY UPDATE id=id"仍然插入重复项

转载 作者:行者123 更新时间:2023-11-29 18:08:00 25 4
gpt4 key购买 nike

我有一个表名称“slot_place_box”。它看起来像这样:

  • id_slot_pb(主键)
  • id_place_box(INT)
  • 日期(DATE)
  • 小时(HOUR)
  • slot_available(INT)

我有(id_place_box + 日期 + 小时)的唯一索引。

在 PHP 中,我正在构建一个 SQL 请求,它看起来像这样:

$sql_request = "
INSERT INTO media.slot_place_box (id_place_box, date, hour)VALUES (32, '2017-12-10', NULL)ON DUPLICATE KEY UPDATE id_place_box = id_place_box;
SET @id = (SELECT SPB.id_slot_pb FROM media.slot_place_box as SPB WHERE
SPB.id_place_box = 32 AND SPB.date = '2017-12-10' AND SPB.hour IS NULL);
INSERT INTO media.slot_config (id_config, id_slot_pb) VALUES (125, @id);

INSERT INTO media.slot_place_box (id_place_box, date, hour)VALUES (32, '2017-12-11', NULL)ON DUPLICATE KEY UPDATE id_place_box = id_place_box;
SET @id = (SELECT SPB.id_slot_pb FROM media.slot_place_box as SPB WHERE SPB.id_place_box = 32 AND SPB.date = '2017-12-11' AND SPB.hour IS NULL);
INSERT INTO media.slot_config (id_config, id_slot_pb) VALUES (125, @id);

INSERT INTO media.slot_place_box (id_place_box, date, hour)VALUES (32, '2017-12-12', NULL)ON DUPLICATE KEY UPDATE id_place_box = id_place_box;
SET @id = (SELECT SPB.id_slot_pb FROM media.slot_place_box as SPB WHERE SPB.id_place_box = 32 AND SPB.date = '2017-12-12' AND SPB.hour IS NULL);
INSERT INTO media.slot_config (id_config, id_slot_pb) VALUES (125, @id);

//etc

";

我的问题是,当我有重复键时,我的“INSERT...ON DUPLICATE KEY UPDATE”仍然插入新行(=数据库中具有相同“id_place_box + 日期 + 小时”的另一个“slot_place_box”,所以我的@id 得到多个结果和脚本错误。它只是在我的表中为我的第一个“INSERT”添加一行,之后不执行任何操作(当我有重复行时)。

现在这是我所掌握的线索:

  • 我为“id_config + 日期 + 小时”的组合添加了“UNIQUE”索引,对于“ON DUPLICATE KEY”是否足够,或者我绝对需要主键?
  • 也许我的字段名称“日期”和“小时”有问题?
  • 事实上,我的“小时”值为“NULL”,这可能会给我的 UNIQUE 索引带来一些麻烦...

你知道为什么吗?

最佳答案

正如 @Solarflare 在评论中所说,我的问题是因为我的字段“hour”的“NULL”值(参见 here )。

我无法使用他向我展示的解决方案 ( here ),因为我使用 MySQL 5.6 而不是 5.7。

我将不得不稍微更改我的请求或更改我的表逻辑或在“HOUR”中输入一个值(例如负数),但我将不得不更改我使用此“NULL”的部分代码。

关于php - "INSERT...ON DUPLICATE KEY UPDATE id=id"仍然插入重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47659336/

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