アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして、よろしくお願いします。
職場環境がかわり、はじめて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文をどうかご教示していただきたく、投稿しました。
よろしくお願いいたします><

A 回答 (1件)

こんな感じですか?



select cast.name,cast.age,photo.url,schedule.starttime,schedule.finishtime
from cast
left join photo on cast.name=photo.name and photo.order=0
left join schedule on cast.name=schedule.name and schedule.workdate='2013-02-05'

なお、カラムにcastやorderといった予約語をいれると思わぬ落とし穴があったりするので
気をつけてください
    • good
    • 0
この回答へのお礼

素晴らしいです!
ありがとうございます。

教えていただいたSQL文に使われている命令をよく調べて勉強して
わたしも、サラッ!と書けるようになりたいです。エクセレント!!!

また、予約語の件了解しました。
こちらもほかにどのような予約語があるか勉強してカラム名を変更します。


本当にありがとうございます^^

お礼日時:2013/02/04 18:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!