プログラミングしているとたまに出てくる、これ。
フォームなどで期間を入力して登録する際に、既に登録されているデータの中で、入力した期間で被っていないかどうかチェックしないといけない場合がありますね。
その時のSQLをついつい忘れてしまうので、備忘録として。
テーブル名は schedules。
該当カラムは、start_atとend_at。
フォーム側のFrom〜Toの入力項目名はfrom, to。
SELECT
*
FROM
schedules
WHERE
start_at < (toの値)
AND
end_at > (fromの値)
どうしても大なり小なりの向きだったり、from, toの値の設定を忘れがち。。
ちなみにlaravelのQuery Builderで書くとこんな感じ。
$schedules = DB::table('schedules)
->where('start_at', '<', $request->get('to'))
->where('end_at', '>', $request->get('from'))
->get();
ご参考まで。