我需要一些逻辑......
我有一个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进行更有效的方式。
感谢。
答案 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;然后保存新记录是安全的,因为如果新的开始日期在旧的结束日期之后,或者新的结束日期在旧的开始日期之前,则它们不能重叠。