2017-06-07 6 views
0

私が選択している時間が無料かどうかを確認する必要があります。 例として、17:00〜17:06の間の時間が取られ、私は17:01〜17:07の間の時間を取ろうとします。 時間が空いているかどうかを確認する正しいSQLクエリは何でしょうか?この状況では、17:01,17:02,17:03回が取られます。データベースでSQLクエリで日付が空いていることを確認してください

私が撮影した時間の終わりを意味2つの取られる時間(午前17時00分)の開始を意味フィールドlaikas、そしてlaikas_endを持っている(午前17時07分)

は、私の知る限りでは、これらを得ましたクエリ: 私はその時間isn'bt取っている時間は、開始時間と終了時間が一致する(つまり、それが取得されるということ)かどうかを確認するには

$uzimtumas_laiko = "SELECT * FROM reklamos WHERE `laikas` >= '$laikas' AND `laikas_end` <= '$laikas_end'"; 

を取られているかどうかを確認するには、次の

$uzimtumas_laiko = "SELECT * FROM reklamos WHERE `laikas` = '$laikas' OR `laikas_end` = '$laikas_end'"; 

私は16:49 - 17:02の間に時間を取ることができますが、17:00 - 17:06が取られることがあります。したがって、17:50-17:02を選択することはできません。私は自分の間に何かが必要だと思っていますが、何も考え出すことはできません。

+0

このhttps://www.w3schools.com/sql/sql_between.aspを試してください –

答えて

0

をあなたを助けるかもしれないので、選択することはできません。

$uzimtumas_laiko = "SELECT * FROM reklamos WHERE (`laikas` BETWEEN '$laikas' AND '$laikas_end') OR (`laikas_end` BETWEEN '$laikas' AND '$laikas_end') OR (`laikas` >= '$laikas' AND `laikas` <= '$laikas_end') OR (`laikas_end` >= '$laikas' AND `laikas_end` <= '$laikas_end')"; 
+0

これは16:49 - 17:02を追加しようとすると動作しますが、17:02-17:03を追加しようとすると動作します17:01 - 17:07が取られたときに動作しません – MKD

+0

私は答えを更新しました。試してみてください。 –

0

多分これはあなたの開始時刻や終了時刻は、選択した範囲内にある場合

"SELECT count(*) as COUNT FROM leave where ((start_date >= to_date(:start_date) and start_date <= to_date(:end_date)) OR (to_date(:start_date) >= start_date and to_date(:start_date) <= end_date)) " 
0

を私は次のように、より効率的であると考えていますあなたがしたいことをする方法:

SELECT * 
FROM reklamos 
WHERE 
liakas <= '$liakas_end' AND 
liakas_end >= '$liakas' 

私はこれをタイムスロット間の「オーバーラップ」をチェックするものと考えています。

関連する問題