2017-04-05 18 views
2

I`m日付間隔が重なるかどうかを確認するために13件の正条件に書き込むことができる日付範囲オーバーラップ機能に取り組ん以上のエレガントな2つの負の条件で:MYSQLで雄弁MYSQL文:</p> <p><a href="https://en.wikipedia.org/wiki/Allen%27s_interval_algebra" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Allen%27s_interval_algebra</a></p> <p>:NOT(A OR B)

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

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); 
}); 

がどのように私はこの問題を解決することができ

これは、私はドキュメントで見つけるcan`tこのようなものを、必要でしょうか?

これはおそらく私の他に関連している記事、重複:Laravel/Eloquent WHERE NOT SUBQUERY

しかし、私は私の質問は今より明らかであると思います。 、NOT句を使用する必要はありません。この方法 -

答えて

1

あなたはLAST_DAYfirst_day上の制約を元に戻すことにより、必要なものを達成することができます。

あなたが

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

を行うことができますし、雄弁ビルダーで、次はトリックを行う必要があり

代わりの

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

をやって:

$query = $query->where('last_day', '>', $first_day)->where('first_day', '>', $last_day); 
関連する問題