• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mysqlのif文かcase文で複数条件を指定する)

MySQLの条件分岐: if文とcase文の使い方

このQ&Aのポイント
  • MySQL初心者の方に向けて、複数条件の指定方法について解説します。
  • StaffテーブルとSch1テーブル、Sch2テーブルを活用してスケジュールの仕組みを考えます。
  • 日付出勤と曜日出勤の優先順位を考慮し、出力する方法についてもご紹介します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こういうのは本来日付がずらーっとならんだカレンダーテーブルをつくって それにinsert していくのが普通 また曜日は月曜日=0とした0~6(WEEKDAY関数)もしくは日曜日=1とした1~7 (DAYOFWEEK)が扱いやすい かりにこんな処理にすると //元データ create table staff(uid int,uname varchar(20)); insert into staff values(1,'田中'); create table sch1(uid int,start_time time,end_time time,d date,flg tinyint) ; insert into sch1 values(1,'9:00','22:30','2014-03-17',1),(1,'9:00','13:00','2014-03-18',1),(1,'9:00','20:00','2014-03-19',1); create table sch2(uid int,start_time time,end_time time,dateW int,unique(uid,dateW)); insert into sch2 values(1,'9:00','22:30',0),(1,'10:00','11:30',1),(1,'13:00','15:30',3); カレンダーテーブルがない場合はテンポラリで無理やりつくる こんな感じで3/17、18、20、21をそれぞれとると 3/17は両方ヒット、3/18は日付でヒット、3/20は曜日でヒットし 3/21はヒットしないことがわかる。 create temporary table sch3 select '2014-03-17' as d; select * from sch3 left join sch1 on sch3.d=sch1.d left join sch2 on weekday(sch3.d)=sch2.dateW; create temporary table sch3 select '2014-03-19' as d; select * from sch3 left join sch1 on sch3.d=sch1.d left join sch2 on weekday(sch3.d)=sch2.dateW; create temporary table sch3 select '2014-03-20' as d; select * from sch3 left join sch1 on sch3.d=sch1.d left join sch2 on weekday(sch3.d)=sch2.dateW; create temporary table sch3 select '2014-03-21' as d; select * from sch3 left join sch1 on sch3.d=sch1.d left join sch2 on weekday(sch3.d)=sch2.dateW; これをまとめて、こんな感じ create temporary table sch3 select '2014-03-17' as d; select coalesce(sch1.start_time,sch2.start_time) as s ,coalesce(sch1.end_time,sch2.end_time) as e from sch3 left join sch1 on sch3.d=sch1.d left join sch2 on weekday(sch3.d)=sch2.dateW; いちいちテンポラリテーブルを作るのが面倒であれば最初に書いた通り 10年分くらいので日付を並べたカレンダーを最初につくっておいて where カレンダ.d='指定日' 的な処理をすればいい 仮に10年分日付つくっても所詮3600件程度、100年分作っても3万ちょいなので 対して重い処理にはならない

xpbbs
質問者

お礼

temporary table初めて知りました。 ちょうどこれから画像プレビュー機能を作りたいので これだと非常に便利ですね 本当にありがとうございました。

関連するQ&A