• 締切済み

MySQL+Perlでの複合処理について

MySQL5.1.22& Perl5.8の環境にて、とあるサイトの作成(風俗店の従業員出席表)をしております。 MySQL5.1.22& Perl5.8の環境にて、とあるサイトの作成(風俗店の従業員出席表)をしております。 そのサイトで「従業員の出勤時間」(work_start、work_end(time型))をあらかじめセットしておき、現在時刻がその範囲内(つまり出勤中の時間帯)に、該当従業員のprofileテーブルを読み込む処理を行いたいのですが、苦戦しております。 また可能であれば「出勤時間内に、お客様が入った場合に「利用されたプラン(60,90,120など)を「残り時間」として表示させる仕組みについて(MySQLの構文のみで実現可能であれば、その構文、複合的な処理になるのであればその処理方法)をお教えいただければ幸いです。 【全体の流れ】 【スケジュール設定】(営業日当日にサイトへ表示) →【出勤】(出勤中表示) →【サービス開始】( サービス残り時間表示)→【サービス終了】(出勤中表示) →【退勤】(本日は終了の表示) テーブルの内容は下記の通りです。 出勤スケジュールテーブル(schedule) ---------------------------------------------------------------- カラム名|staff_id|work_day |work_start|work_end|service_start|service_end| ---------------------------------------------------------------- 型 | int | date | time | ---------------------------------------------------------------- 内容 | 1 | 2011-06-08|18:00:00 |06:00:00| ** | ---------------------------------------------------------------- 従業員プロフィールテーブル(profile) ---------------------------------------------------------------- カラム名|staff_id| name | 3size |comment | ---------------------------------------------------------------- 型 | int |varchar(15)| varchar(30) | varchar(100) | ---------------------------------------------------------------- 内容 | 1 | 従業員名 |T:150/B:200/W:200/H:200 |従業員コメント | ---------------------------------------------------------------- 複雑なご質問となりすみませんがどなたかご回答お願いいたします。

みんなの回答

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

ポイントとしては日をまたぐ処理でしょうね たとえば、昼の12時を区切りに当日と翌日を振り分けるとか・・・ 一定のルールが必要でしょう。 create table schedule( staff_id int,work_day date,work_start time,work_end time,service_start time,service_end time, unique (staff_id,work_day)); insert into schedule values(1,'2011-06-08','18:00:00','06:00:00','18:15:00','05:45:00') ,(2,'2011-06-08','18:00:00','23:40:00','18:15:00','23:30:00') ,(3,'2011-06-08','01:00:00','06:00:00','01:15:00','05:45:00'); SELECT staff_id ,addtime(work_day,work_start)+ interval if(work_start<'12:00:00',1,0) day as ws ,addtime(work_day,work_end)+ interval if(work_end<'12:00:00',1,0) day as we ,addtime(work_day,service_start)+ interval if(service_start<'12:00:00',1,0) day as ss ,addtime(work_day,service_end)+ interval if(service_end<'12:00:00',1,0) day as se FROM schedule ID=1は終了が12時前なので6/9とみなす ID=2は終了も当日 ID=3は開始が12時前なので6/9とみなす あとはこの時間とNOW()を比較するだけだとおもいます

関連するQ&A