mysql 插入日期i_php – mysql – 将日期范围插入日期列中I...

本文探讨如何在一个SQL插入语句中实现日期范围冲突检查,确保用户提交的acc_id的start_date和end_date不在已有范围内,包括避免范围覆盖、边界情况和多范围验证。通过实例解析复杂性及可能的优化方法。
摘要由CSDN通过智能技术生成

我有以下表结构:

表名:有用

id (autoincremetn) | acc_id | start_date | end_date

-------------------------------------------------------

1 | 175 | 2015-05-26 | 2015-05-31 |

-------------------------------------------------------

2 | 175 | 2015-07-01 | 2015-07-07 |

-------------------------------------------------------

它用于定义日期范围可用性,例如. start_date和end_date之间的所有日期都不可用于给定的acc_id.

基于用户输入我正在关闭不同的范围,但我想抛出一个错误,如果用户试图关闭(提交)一个已开始的范围或在已存在的范围内某处的end_date(对于提交的acc_id)在DB中.

在这个例子中,start_date:2015-05-30 end_date:2015-06-04将是一个很好的失败候选人.

这几乎解释了如何分两步完成,两个查询之间有一些PHP逻辑.

但我想知道是否可以在一个插入语句中完成.

我最终会检查受成功或失败影响的行(子问题:是否有更方便的方法来检查除了日期重叠之外是否因为某些其他原因而失败?)

编辑:

为了回应Petr的评论,我将进一步说明验证:

any kind of overlapping should be avoided, even the one embracing the

whole range or finding itself inside the existing range. Also, if

start or end dates equal the existing start or end dates it must be

considered an overlap. Sometimes certain acc_id will already have more

than one rang in the table so the validation should be done against

all entries with a given acc_id.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值