こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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の構造変えたら作るよ!等の知恵を貸して戴けたら幸いです。

実現させたい出力イメージを画像で添付します。

宜しくお願いします。

投稿日時 - 2011-12-24 22:25:44

QNo.7207484

すぐに回答ほしいです

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

こんな感じでいけると思いますが、
確認してないので適当にいじってください。
インデントは全角スペースになっています。

SELECT * FROM worker
 WHERE shop_id = ?
 LEFT JOIN(
  SELECT * FROM schedule
  WHERE start_time > DATE_ADD(CURRENT_DATE, INTERVAL -7 DAY)
 ) USING(worker_id)

投稿日時 - 2011-12-25 16:04:03

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

予定の入ってる従業員だけ出力するのは出来ます。

↑これのクエリ文ってどんな感じですか。

多分なんですが、テーブル結合に内部結合(inner join)ではなく、
外部結合(left joinなど)を用いると予定の入って無い従業員も
抽出されそうな気がします。

投稿日時 - 2011-12-25 00:43:48

補足

日付だけのテーブルを用意してレフトジョインさせれば出来そうな感じがするのですが、どうでしょうか?

ただその場合、日付が常に自動で最新の一週間を示す様にならなければいけなくて、難しいです。

投稿日時 - 2011-12-25 03:48:39

お礼

有難う御座います無事解決出来ました!

投稿日時 - 2012-01-07 15:40:09

あなたにオススメの質問