2013-10-12 3 views
0

Я пытаюсь найти временные перекрытия конкретного пользователя, я думаю, что моя логика поймала бы все круги, но это ловится, только если начало ИЛИ конец находится между временными рамками, но ничего не найдено, если оба начинаются и заканчиваются между некоторыми периодами записей!yii критерий условия между датой

$tempModel = clone $this; // clone model 

$criteria->addCondition(' 
     (t.user = :user AND (t.startDate >= :start AND t.startDate <= :end)) 
     OR 
     (t.user = :user AND (t.endDate >= :start AND t.endDate <= :end)) 
    '); 
    $criteria->params = array(
     ':start' => date('Y-m-d', strtotime($tempModel->startDate)), 
     ':end' => date('Y-m-d', strtotime($tempModel->endDate)), 
     ':user ' => $tempModel->userID , 
    ); 

if(!empty($tempModel->idUserTime)) // dont find updated record 
      $criteria->addCondition('t.idUserTime != ' . $tempModel->idUserTime); 

$criteria->addCondition('t.active = 1'); // if this is an active user time 

$hasRecord = Usertime::model()->findAll($criteria); 

В чем проблема?

ответ

2

Две даты накладываются друг на друга, если хотя бы один из boundaies каждого из них находятся между границами друга:

... 
WHERE some_other_conditions AND (
    date1.start BETWEEN date2.start AND date2.end OR 
    date1.end BETWEEN date2.start AND date2.end OR 
    date2.start BETWEEN date1.start AND date1.end OR 
    date2.end BETWEEN date1.start AND date1.end 
) 
+0

большое спасибо – tinybyte

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