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文をどうかご教示していただきたく、投稿しました。
よろしくお願いいたします><
お礼
凄いですね…0.5秒くらいで取り出せました!ありがとうございます。 質問の内容的にはこれで解決→終りなのですが、もう少しだけ質問させてください。 EXPLAINをつけて実行すると、下記のようなテーブルが表示されたのですが、googleさんに聞いてみてもどこがどうなって、どう直せばいいのかさっぱりでした…。 ※プレーンテキストだと整形がうまくいきそうにないのでHTMLで失礼します。 <html> <head> <style> td,th{padding:0 8px;border:1px solid #000;} </style> </head> <body> <table> <tr><th>id</th><th>select_type</th><th>table</th><th>type</th><th>possible_keys</th><th>key</th><th>key_len</th><th>ref</th><th>rows</th><th>Extra</th></tr> <tr> <td align="right" class=" nowrap">1</td> <td class="">PRIMARY</td> <td class=""><derived2></td> <td class="">ALL</td> <td class=""><i>NULL</i></td> <td class=""><i>NULL</i></td> <td class=""><i>NULL</i></td> <td class=""><i>NULL</i></td> <td align="right" class=" nowrap">257</td> <td class="">Using filesort</td> </tr> <tr> <td align="right" class=" nowrap">1</td> <td class="">PRIMARY</td> <td class="">site</td> <td class="">eq_ref</td> <td class="">PRIMARY</td> <td class="">PRIMARY</td> <td class="">767</td> <td class="">feed.site_url</td> <td align="right" class=" nowrap">1</td> <td class=""> </td> </tr> <tr> <td align="right" class=" nowrap">2</td> <td class="">DERIVED</td> <td class="">feed</td> <td class="">ALL</td> <td class=""><i>NULL</i></td> <td class=""><i>NULL</i></td> <td class=""><i>NULL</i></td> <td class=""><i>NULL</i></td> <td align="right" class=" nowrap">487226</td> <td class="">Using where; Using temporary; Using filesort</td> </tr> </table> </body> </html> さらに高速にすることが可能ということでしょうか? feedテーブルは487226件のレコードがあり、 siteテーブルは287件のレコードがあります。