2016-09-01 2 views
0

У меня есть структура базы данныхКак я могу написать функцию, чтобы объединить две записи

--car_id 
--from_date_time 
--to_date_time 
--is_booked 

Я хочу сделать:

If any two records having is_booked == 'N" exists in database, having overlapping from_date_time and to_date_time, 
then these records will be merged into a single record. 

Пример:

If i have records in database like: 
Record 1: 
from_date_time = '2016-08-01 04:00:00'; 
to_date_time = '2016-08-01 06:00:00'; 

Record 2: 
from_date_time = '2016-08-01 03:00:00'; 
to_date_time = '2016-08-01 05:00:00'; 

Then,above two records will get merged to create following: 
from_date_time = '2016-08-01 03:00:00'; 
to_date_time = '2016-08-01 06:00:00'; 

Я попробовал следующее:

i) Check if the looped_from_date_time is in any database record with from_date_time >= looped_from_date_time and to_date_time <= looped_from_date_time and is_booked = "N" and car_id = $car_id. 

    iii) Check if the looped_to_date_time is in any database record with from_date_time >= looped_to_date_time and to_date_time <= looped_to_date_time and is_booked = "N" and car_id = $car_id. 

Но он не работает

+0

Не могли бы вы определить свою схему и данные на http://sqlfiddle.com? Это облегчит нам задачу. – tanaydin

+0

Думаю, вам нужно переосмыслить структуру данных. – RST

ответ

0

'Period1' перекрывается 'Period2'

if 

NOT (end_of_period1 < beginning_of_period2 OR 
beginning_of_period1 > end_of_period2). 

Это единственный способ, чтобы охватить все возможные ситуации.

В вашем случае я считаю, что первое условие (I) всегда ложно: если 'from_date_time' всегда уступает 'to_date_time' во всех записях, вы не можете иметь "from_date_time >= looped_from_date_time and to_date_time <= looped_from_date_time".

Смежные вопросы