【问题标题】:Mysql insert multiple rows if each not between 2 column range?如果每行不在2列范围之间,Mysql插入多行?
【发布时间】:2016-09-12 10:15:10
【问题描述】:

我使用 PHP 动态生成多个值并将它们插入到表中,带有一些值的插入的简化示例:

INSERT INTO table (time1,time2)
VALUES ('08:00','09:00'),('09:00','10:00'),('11:00','12:00');

对于上面的例子,我想阻止它插入:

INSERT INTO table (time1,time2)
    VALUES ('08:15','08:45'),('09:30','12:00');

插入多个值时是否可以在 2 列之间进行范围比较?或者我是否需要使用单个插入创建一个循环(出于性能原因我想避免这种情况)?

编辑:我正在使用 PHP 表单提交数据。我猜逻辑步骤是使用 $_POST 值并执行 SELECT 检查时间是否冲突。是在 SELECT 中使用 BETWEEN 还是为 PHP 函数返回所有值是另一回事。

【问题讨论】:

  • 为什么? 为什么要把所有的负担都交给mysql?在 php 中检查这个,除了你不能在 insert 语句上放置 WHERE 子句。
  • 首先,你的数据库中这些列的数据类型是什么?简化的示例使您看起来像是在使用字符串来注册时间。这样就很难比较任何东西了。
  • @AsheraH 我使用 TIME 作为数据类型
  • @Shaharyar 哦,你的意思是提取所有数据和 PHP 计算?我只是认为有一个更简单的 sql 选项进行比较
  • 你说你在php中生成数据,那么为什么不在php中进行比较并在mysql中插入最终的正确数据集。但是如果你还想在mysql中做,你可以使用insert before trigger来检查要插入的内容并阻止它。但我不建议这样做,因为它的成本。

标签: mysql


【解决方案1】:

检查来自 php 的独立条目,使用此查询来检查新条目所产生的冲突数量:

SELECT count(*) as `conflicts` 
    FROM table 
WHERE 
    '08:15' BETWEEN time1 AND time2 -- user your variable here
    OR
    '08:45' BETWEEN time1 AND time2 -- user your variable here

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2018-05-05
    • 2011-12-10
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多