通过My-SQL或PHP检查重叠期间(日期之间)

时间:2014-07-13 08:20:43

标签: php mysql sql

我需要一些逻辑......

我有一个My-SQL表,如下所示

id | program_name | start_date | end_date
 1 | program1     | 2014-12-01 | 2014-12-07

现在,如果我想通过PHP为id 1插入一条新记录,我想检查句点(在start_date和end_date之间)重叠或没有..

假设我想用

插入新记录
id = 1 , program_name = program1 , start_date = 2014-12-06 , end_date = 2014-12-10

由于这段时间重叠,我想发出警告信息。我需要逻辑。

我的目标是,

Let 

start_date in database = old_start_date , end_date in database = old_end_date, the insert record start date = new_start_date , insert record end date = new_end_date

如果

old_start_date < new_start_date and old_end_date < new_end_date == fine  (period before the entered period)
old_start_date > new_start_date and old_end_date > new_end_date == fine  (period after the entered period)
old_start_date < new_start_date and old_end_date > new_end_date == warning (old period is within the new period)
old_start_date > new_start_date and old_end_date < new_end_date == warning (new period is within the old period)
old_start_date = new_start_date == warning
old_end_date = new_end_date == warning

如果我错了,请指导我,或者通过My-SQL或PHP进行更有效的方式。

感谢。

1 个答案:

答案 0 :(得分:0)

这是你应该工作的女巫的逻辑顺序: (一旦理解了,就可以在任何编程语言中使用它)

1-创建 function_a(日期d),如果日期大于特定日期,则返回true

2-创建 function_b(日期d),如果日期小于特定日期,则返回true

3-创建一个循环并调用 function_a (在所有old_end_dates上调用它) 并且只有当所有结果都返回true时才返回true(保存结果为 var_a
一般来说:只有当新的开始日期大于所有记录的结束日期时,才会返回true

4-创建循环并调用 function_b (在所有old_end_dates上调用它)并仅在所有结果都返回true时返回true(保存结果为 var_b )<登记/> 一般来说:只有当新的结束日期小于所有记录的结束日期时,才会返回true

5-如果(var_a == true或var_b == true) -----&gt;然后保存新记录是安全的,因为如果新的开始日期在旧的结束日期之后,或者新的结束日期在旧的开始日期之前,则它们不能重叠。