場合分けだけですね
まずstart_timeがend_timeより小さければ普通に
現時刻がstart_timeとend_timeの間にあればOK
つぎにstart_timeがend_timeより大きければ日付をまたぐのと考えられるので
現時刻がstart_timeより大きいか、限時刻がend_timeより小さい必要があります。
それを踏まえるとこんな感じ
//準備
create table t_time(id int ,start_time time,end_time time);
insert into t_time values(1,'1:00:00','16:00:00'),(2,'14:00:00','1:00:00');
//結果
select * from t_time
where (start_time<end_time and (@now:=CURTIME()) between start_time and end_time)
or (start_time>end_time and (@now > start_time or @now<end_time));
テストのためにCURTIME()のところを
'00:00:00'や'15:00:00'などに書き換えてやると解ると思います
質問者
補足
すごい!天才ですか貴方は!(;゜Д゜)!
書いて頂いた事は、考えていたのですが、PHPで条件判断してどうこうと
ややこしい事を考えていたのですが、SQLでこんな事が実現できるのですね!
ですが、回答を頂いて恐縮なのですが教えていただいたコードを書いても
下記のようなエラーが出ます。
#1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,NUMERIC) for operation '>'
文字コードがおかしいようなのですが、私には何が問題なのか分かりません
お手数ですが再度、ご教示いただけませんでしょうか。お願いします。
>#1267 - Illegal mix of collations
コードが違うテーブルを結合したりする際のエラーっぽいですね
今回挙げた例だと結合のロジックはないように見えますが
なにか拡張して使っているのでしょうか?
質問者
補足
早急な返信ありがとうございます!
まだ自分の環境に合わせてコードを変更した訳ではなく
提示していただいたコードをphpMyAdminのSQLで実行
しただけです。
(1)create table t_time(id int ,start_time time,end_time time);
insert into t_time values(1,'1:00:00','16:00:00'),(2,'14:00:00','1:00:00');
テーブルが作成される。
(2)select * from t_time
where (start_time<end_time and (@now:=CURTIME()) between start_time and end_time)
or (start_time>end_time and (@now > start_time or @now<end_time));
以下のエラーが表示される。
#1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,NUMERIC) for operation '>'
特に何かを結合しているわけではありません。
照合順序は[utf8_general_ci]です。
補足
すごい!天才ですか貴方は!(;゜Д゜)! 書いて頂いた事は、考えていたのですが、PHPで条件判断してどうこうと ややこしい事を考えていたのですが、SQLでこんな事が実現できるのですね! ですが、回答を頂いて恐縮なのですが教えていただいたコードを書いても 下記のようなエラーが出ます。 #1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,NUMERIC) for operation '>' 文字コードがおかしいようなのですが、私には何が問題なのか分かりません お手数ですが再度、ご教示いただけませんでしょうか。お願いします。