2017-04-05 28 views
2

我真的上,可以在13種陽性情況寫日期範圍重疊的功能工作,以檢查日期時間間隔重疊:鋒MYSQL語句:WHERE NOT(A或B)

https://en.wikipedia.org/wiki/Allen%27s_interval_algebra

或更優雅2分負的條件:

http://baodad.blogspot.nl/2014/06/date-range-overlap.html

在MYSQL:

WHERE NOT(`last_day` <= '2001-06-01' OR `first_day` >= '2022-12-01'); 

這需要這樣的事情,我不能老是在文檔發現:

$query = $query->whereNot(function ($query) use ($first_day, $last_day) { 
    $query->where('last_day', '<=', $first_day); 
    $query->orWhere('first_day', '<=', $last_day); 
}); 

我怎樣才能解決這個問題?

這關係到我的其他可能的複製帖子:Laravel/Eloquent WHERE NOT SUBQUERY

但我希望我的問題是更清晰了。

回答

1

你可以達到你所需要的通過恢復對LAST_DAYFIRST_DAY的約束 - 這樣就沒有必要使用NOT條款。

而不是做

WHERE NOT(`last_day` <= '2001-06-01' OR `first_day` >= '2022-12-01'); 

你可以做

WHERE `last_day` > '2001-06-01' AND `first_day` < '2022-12-01'; 

並與口才Builder中的以下應該做的伎倆:

$query = $query->where('last_day', '>', $first_day)->where('first_day', '>', $last_day);