- 締切済み
複数の検索結果で別テーブルの値を取得する
お世話になっております。質問タイトルと内容がマッチしていないかもしれません。(何て書けばいいかわかりませんでした。。。) ある条件をもとに、別データベースから取得した $t_code(例:AAT1)があるとします。 下記、データベース名:DomesticCityの$t_codeで 1)TYO,NRT,HNDの3件あった場合→"東京"と表示 2)TYO,NRTの2件あった場合→"成田"と表示 3)TYO,HNDの2件あった場合→"羽田"と表示 4)OSA,KIX,ITMの3件あった場合→"大阪"と表示 5)OSA,KIXの2件あった場合→"関西"と表示 したいのですが、どうしたらいいのでしょうか? 空港名なのですが、TYO(東京)NRT(成田)HND(羽田)は 1つの仲間ですが、明確にTYOとNRTしかない場合、 成田と羽田を区別したいのです。 CTS(札幌)KMQ(小松)など、空港が1つしかない都市は そのまま表示します。 データベース名:DomesticCityは他社からのデータですので 構造など変更することは出来ませんが、 データベース名:frmCityCodeList_JP はうちのデータなので 変更可能です。 データベース名:DomesticCity フィールド:t_code , dome データ例: AAT1 , TYO AAT1 , NRT AAT1 , HND AAT1 , CTS AAT1 , KMQ AAT1 , OSA AAT1 , KIX AAT1 , ITM (わかりやすく1行あけます) COT , TYO COT , NRT COT , HND (わかりやすく1行あけます) QFT3 , TYO QFT3 , NRT (わかりやすく1行あけます) LHT2 , TYO LHT2 , HND データベース名:frmCityCodeList_JP フィールド:code , code2 , code_jp データ例: NRT , TYO , 成田空港 HND , TYO , 羽田空港 KIX , OSA , 関西空港 ITM , OSA , 伊丹空港 CTS , null , 千歳空港 KMQ , null , 小松空港 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mooboogie
- ベストアンサー率68% (28/41)
#1さんの言うことはまったくその通りで、バージョン毎に別のアプリケーションの如くです。 しかしながら、無料の問題集として「教えてgoo」を使って勉強している私は、関係なく、回答してしまうのでした^^; それはさておき。。。 下記SQLで出ますが、もう少し良い方法がある気が。 select t_code, if ( group_concat(dome)like '%TYO%' and group_concat(dome)like '%NRT%' and group_concat(dome)like '%HND%' ,'東京', if ( group_concat(dome)like '%TYO%' and group_concat(dome)like '%NRT%' ,'成田', if ( group_concat(dome)like '%TYO%' and group_concat(dome)like '%HND%' ,'羽田', if ( group_concat(dome)like '%OSA%' and group_concat(dome)like '%KIX%' and group_concat(dome)like '%ITM%' ,'大阪', if ( group_concat(dome)like '%OSA%' and group_concat(dome)like '%KIX%' ,'関西','' ))))) from DomesticCity group by t_code; 当方環境 Mysql5.0です。
- chukenkenkou
- ベストアンサー率43% (833/1926)
失礼。 LHT2 , 羽田 でしたね。
- chukenkenkou
- ベストアンサー率43% (833/1926)
MySQLでの実現方法を質問する場合は、必ずバージョンを明記してください。具体的なSQL例を提示しても、あなたの環境では動かない可能性があります。 >どうしたらいいのでしょうか? あなたの考えた方法は、まったくないのでしょうか? ここは仕様を提示して、何かを作ってもらう場所ではありません。 以下のような形で、表示したいということでしょうか? AAT1 , 東京 AAT1 , 札幌 AAT1 , 小松 AAT1 , 大阪 COT , 東京 QFT3 , 成田 LHT2 , 成田
お礼
chukenkenkouさん レスありがとうございました。自分で考えるうちにごちゃごちゃになりコードを記載しませんでした。。。すみませんでした。 またバージョンは他の人に設定してもらったので、(情けないのですが)わかりません。。今聞けないので今後の為に聞いておきます。 下記でなんとかなりそうです。でも他にスマートな方法があれば、ご教授下さい。 frmCityCodeList_JP をかえる code1 , code2 , code3 , code4 , code_jp OSA , KIX , ITM , UKB , 大阪 TYO , HND , NRT , null , 東京 CTS , null , null , null , 札幌 大阪を例にすると最大4件あるので $code="OSA"; $code2="KIX"; $code3="ITM"; $code4="UKB"; か、東京の場合 $code="TYO"; $code2="HND"; $code3="NRT"; $code4=""; か、その他1つしかない場合 code="CTS"; $code2=""; $code3=""; $code4=""; $sql_d = "select * from DomesticCity where t_code = '$t_code' and(dome = '$code' or dome = '$code2' or dome = '$code3' or dome = '$code4')"; $result_d = mysql_query($sql_d); //1つしかない場合 if (mysql_num_rows($result_d) == 1) { while($rec_d = mysql_fetch_array( $result_d, MYSQL_ASSOC )) { foreach ($rec_d as $k=>$v) { $rec_d[$k] = mb_convert_encoding($v,'UTF-8','EUC-JP'); } echo $rec_d[dome] ; $dome = $rec_d[dome] ;→1なのでfrmCityCodeList_JPからcode_jpの値をとる } } //2つある場合 if (mysql_num_rows($result_d) == 2) { $sql_d2 = "select * from DomesticCity where t_code = '$t_code' and(dome = '$code' or dome = '$code2' or dome = '$code3' or dome = '$code4') group by 't_code'"; $result_d2 = mysql_query($sql_d2); while($rec_d2 = mysql_fetch_array( $result_d2, MYSQL_ASSOC )) { foreach ($rec_d2 as $k=>$v) { $rec_d2[$k] = mb_convert_encoding($v,'UTF-8','EUC-JP'); } echo $rec_d2[dome] ; $dome = $rec_d2[dome] ;→NRT,TYOならNRTが、KIX,OSAならKIXが出るので別テーブルから空港名をとる } } //3つある場合 if (mysql_num_rows($result_d) == 3) { 以下省略 //4つある場合 if (mysql_num_rows($result_d) == 4) { 以下省略
お礼
mooboogieさん ご返答ありがとうございました。 自分なりに考え、またmooboogieさんのコードにgroup byというのがあったので、使ってみたらなんとかなりそうでした。。。 本当にありがとうございました。