• 締切済み

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 |従業員コメント | ---------------------------------------------------------------- 複雑なご質問となりすみませんがどなたかご回答お願いいたします。

  • MySQL
  • 回答数1
  • ありがとう数0

みんなの回答

  • 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

  • PHPとMYSQLを使用したシフト管理システム。

    現在、PHPとMYSQLを使用してシフト管理システムを作ろうと考えているのですが、どのようなテーブル構造にするかで悩んでいます。 どなたかアドバイスをいただけるとありがたいです。 よろしくお願いします。 ・シフト管理でやりたいこと。 日付を指定すると、その日に出勤する従業員の写真、出勤時間、退勤時間が一覧になって表示される。 従業員を指定すると、その従業員の一週間分のシフト(出勤時間、退勤時間)が表示される。 ウェブサイトで内容を表示、編集できるようにする。 尚、従業員のテーブル"juugyouin"(カラムはnumber,name,age,・・・等)は別に作成済みです。 また、他にこのようなシステムを作るにあたっての注意事項などアドバイスいただけたらと思います。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHP&MySQL日付をまたぐスケジュール表示

    初めて質問します。 社員スケジュールを1週間分一覧出来るプログラムをPHP&MySQLで作ってます。 どうしても出来なかったです。 【shop (支店テーブル)】 shop_id ※オートインクリメント 支店ID name ※支店名 start_time ※Time型?お店の時間は固定 営業開始時間 last_time ※Time型?お店の時間は固定 営業終了時間 【worker (従業員テーブル)】 worker_id ※オートインクリメント 従業員ID shop_id ※支店ID worker_name ※従業員名 【schedule (予定テーブル)】 schedule_id ※オートインクリメント 予定ID worker_id ※従業員ID start_time ※DateTime型 勤務開始予定時間 last_time ※DateTime型 勤務終了予定時間 条件 1.お店の営業時間で日付とスケジュール一覧が切り替わる。 0:00を過ぎた場合、どうしても上手に出来ません。 言葉だけでは伝わりにくいと思うのでExcelで出力イメージの画像も添付してます。 そのまま貼って使える様なソース等教えて戴けたら、ポイント等・・・ 知恵を貸して戴けるだけでも助かります。 急ぎ目なのでお願いします。

    • ベストアンサー
    • PHP
  • PHP&MySQL従業員一覧に対するスケジュール

    2回目の質問です。 社員スケジュールを1週間分一覧出来るプログラムをPHP&MySQLで作ってます。 どうしても出来なかったです。 【shop (支店テーブル)】 shop_id ※オートインクリメント 支店ID name ※支店名 start_time ※Time型?お店の時間は固定 営業開始時間 last_time ※Time型?お店の時間は固定 営業終了時間 【worker (従業員テーブル)】 worker_id ※オートインクリメント 従業員ID shop_id ※支店ID worker_name ※従業員名 【schedule (予定テーブル)】 schedule_id ※オートインクリメント 予定ID worker_id ※従業員ID start_time ※DateTime型 勤務開始予定時間 last_time ※DateTime型 勤務終了予定時間 出力させたいのが支店の全従業員の名前と1週間分のデータなのですが、日付の出力までは出来ています。 予定の入って無い従業員に対しても、一覧表示に出したいのですがどうしても出来ません。 ※予定の入ってる従業員だけ出力するのは出来ます。 この場合、日付だけのテーブルを別途用意して連結させたら実現出来るのでしょうか? それとも複雑なSQL文で抽出する事が出来るのでしょうか? DBの構造変えたら作るよ!等の知恵を貸して戴けたら幸いです。 実現させたい出力イメージを画像で添付します。 宜しくお願いします。

  • PHPとMYSQLを使用したデータベース編集。

    PHPとMYSQLを使用して、従業員のシフト管理のシステムを作ろうと思っています。 テーブルには、従業員ID、日付、出勤時間、退勤時間のカラムを持たせるつもりです。 そこから日付を指定して、その日に出勤する従業員を一覧にしたり、従業員を指定して、その従業員の一週間分のシフトを一覧にしたいと考えています。 そこで、データをPHPでMYSQLに入力したいのですが、一日ずつデータをデータベースに入力することはできるのですが、一週間分のシフトをまとめてMYSQLに入力する方法がわかりません。 何かよい方法はありませんか? ヒントになるような言葉、参考になりそうなウェブサイト、書籍、ささいなことでもアドバイスいただけたらと思います。よろしくお願いします。 イメージとしては、従業員ごとに日付の欄が一週間分あり、その日付の欄ごとに出勤時間、退勤時間を入力できる欄があり、そのフォームを入力してから送信ボタンを押すと入力した一週間分のデータがMYSQLに入力されるようにしたいです。 わかりにくいかもしれませんが、よろしくおねがいします。

    • ベストアンサー
    • MySQL
  • AccessでMySQLを表示 改行が表示されない

    以下等のページを参考にしてMySQLのテーブルをAccessで表示することを試みました。 http://mysqlweb.net/category/4062977-1.html が、しかし、改行の入っている文字列はAccessでは表示されません。 (文字列はMySQLで、VARCHARで指定しています) これは致し方ないものなのでしょうか。

    • ベストアンサー
    • MySQL
  • mysqlのif文かcase文で複数条件を指定する

    mysql初心者です。 3つのテーブルでスケジュールの仕組みを考えていますが Staff→スタッフデータ id  name 1   田中 Sch1→日付出勤 id  start_time  end_time  date  flg 1   9:00   22:30   2014-03-17   1 Sch2→曜日出勤 id  start_time  end_time  dateW 1   9:00   22:30   1 ※dateWは曜日(0~6) 日付出勤優先なので、なければ曜日出勤を出力します。 たとえば、 田中さん (1)日付登録:2014-03-17(月) 09:00-18:00 (2)曜日登録:1(月) 10:00-19:00 (3)曜日登録:2(火) 09:00-18:00 PHP側でやるなら、 for (一週間分回す) { if (Sch1[date]) { 日付設定出力 }else{ 曜日設定出力 } } 全出力した(日付、曜日)データを一個の配列に入れて、start_timeでソートするかで出力する。。 Mysqlのif文かcase文分でどう書いたらいいですか? 説明が下手ですが、 どなたかご存知の方がいらっしゃれば是非、ご教授ください。

    • ベストアンサー
    • MySQL
  • mySQL 複数テーブルから検索したい

    はじめまして、よろしくお願いします。 職場環境がかわり、はじめてmySQLを使用しています。 3つのテーブルから情報を検索したいのです。 [テーブル名: cast] name             // PRIMARY KEY age (例 なまえ1, 22 なまえ2, 28 なまえ3, 25 [テーブル名: photo] name order             // 写真表示順 (INT) url               // 写真格納先URL (例 なまえ1, 0, http://なまえ1A.jpg なまえ1, 1, http://なまえ1B.jpg なまえ1, 2, http://なまえ1C.jpg なまえ3, 0, http://なまえ3A.jpg [テーブル名: schedule] name workday           // 出勤日 (DATE) starttime          // 出勤時間(TIME) finishtime          // 退勤時間(TIME) (例 なまえ3, 2013-02-04,  9:00, 17:00 なまえ2, 2013-02-05, 10:00, 18:00 なまえ2, 2013-02-06, 10:00, 18:00 なまえ2, 2013-02-07, 10:00, 18:00 キャスト情報(cast)とそのキャストの写真格納先URL(photo)とキャストの出勤時間(schedule)のテーブルです。 ※キャストは何枚でも写真を登録できます。登録していない場合もあります。 キャストのリストを表示したいです。 表示したい項目は cast.name, cast.age, photo.url, schedule.starttime, schedule.finishtime になります。 期待する結果は(2月5日の場合) なまえ1, 22, なまえ1A.jpg, NULL, NULL なまえ2, 28, NULL,     10:00, 18:00 なまえ3, 25, なまえ3A.jpg, NULL, NULL すべてのキャストを表示します。 photo.urlはphoto.order=0のもの(photo.order=0の写真をサムネイル表示に使っています) 2月5日に出勤情報があれば表示 いろいろ考えたのですが、どうしても photo にデータがない("なまえ2")のところでつまづいてしまって、どうにも。。。 とりあえずPHPでそれぞれのテーブルの情報を取得して 自分で UNION、 USING('name') みたいな処理してますが、ソースがとっても恰好悪いです。 ズバッとしびれるSQL文をどうかご教示していただきたく、投稿しました。 よろしくお願いいたします><

    • ベストアンサー
    • MySQL
  • PHP+MySQLの繰り返し処理で…

    PHPとMYSQLを使ってWEBページを作っています。 わからないところがあるので、どなたか教えていただけないでしょうか?php5+mysql4.0.1です。 検索フォームから送られてきた条件をもとに、1ページに10件の検索結果を表示しています。表示するのはテーブル1の名前で、ここまではうまくいっています。 例:------------------------------------------ 検索結果 神奈川県 林さん 東京都 遠藤さん 北海道 近藤さん 例:------------------------------------------ このあと、上記クエリの結果が続く限りテーブル2 から名前に該当する趣味を表示したいと思います。 例:------------------------------------------ 検索結果 神奈川県 林さん テニス 東京都 遠藤さん サッカー 北海道 近藤さん 絵画 例:------------------------------------------ この処理を加えると、一ページに10件表示されていたものが最初の一件だけしか表示されなくなってしまいます。whileの中に新たにクエリを書いているからでしょうか…? 以下に問題部分だけ見やすくまとめなおしたソースを書きました。 (1)$sql = "SELECT name,ken FROM tablename where ken=$ken"; $mysql->query($sql); while($row = $mysql->fetch()){ $name = $row[name]; (2)$sql2 = "SELECT syumi FROM tablename2 WHERE name='$name'"; $mysql->query($sql2); while($row2 = $mysql->fetch()){ $syumi = $row2[syumi]; } echo "$ken"."$name"."$syumi"; } わかりづらい説明ですみません。 テーブル1に趣味のフィールドを作ることはできない前提で、このままのDB構造でうまく上記を解決することはできますか? ご指導よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP5+MySQLで現在日時とDB内の開始日時と終了日時との比較の方

    PHP5+MySQLで現在日時とDB内の開始日時と終了日時との比較の方法を教えてください。 table_a id start end ----+--------------------+---------------------+ 001 2010-01-01 10:00:00 2010-01-03 18:30:00 002 2010-01-01 12:00:00 2010-01-05 20:00:00 ・ ・ というデータがある時、 現在の日時がid:001のstartとendの間だったら1、 start前だったら0、endより後だったら2の値を表示させるにはどうしたらいいのでしょうか? $sql = "SELECT A.id ,A.start ,A.end FROM table_a A WHERE A.id = ".$id." "; $result = mysql_query($sql); で取得して time()などと比較すればいいとは思ってますが、DBから持ってきた日付との比較方法がわかりません。

    • ベストアンサー
    • PHP
  • テーブル作成時のエラーについて(Mysql 5.1.30)

    SQLを勉強始めたばかりの超初心者です。 先日勉強のため、Mysql ver.5.1.30をDLしてインストールしました。 名簿テーブルを作成しようとMySQL Command Line Clientから以下のコマンドを入力しました。 mysql> create table 名簿( -> 姓 varchar(12), -> 名 varchar(12), -> 生年月日 date); 実行すると以下のエラーが表示されます。 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '名簿( 姓 varchar(12), 名 varchar(12), 生年月日 date)' at line 1 これは何が間違っているのでしょうか? テキストどおりに入力しているのですが、テーブルが作成できないため次に進めません。 周りに詳しいものもいないため困っています。 ぜひご教授よろしくお願いします。

    • ベストアンサー
    • MySQL