プロが教える店舗&オフィスのセキュリティ対策術

お世話になっております。質問タイトルと内容がマッチしていないかもしれません。(何て書けばいいかわかりませんでした。。。)
ある条件をもとに、別データベースから取得した
$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 , 小松空港

よろしくお願いします。

A 回答 (3件)

#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です。
    • good
    • 0
この回答へのお礼

mooboogieさん
ご返答ありがとうございました。
自分なりに考え、またmooboogieさんのコードにgroup byというのがあったので、使ってみたらなんとかなりそうでした。。。

本当にありがとうございました。

お礼日時:2007/01/31 15:28

失礼。



LHT2 , 羽田

でしたね。
    • good
    • 0

MySQLでの実現方法を質問する場合は、必ずバージョンを明記してください。

具体的なSQL例を提示しても、あなたの環境では動かない可能性があります。

>どうしたらいいのでしょうか?

あなたの考えた方法は、まったくないのでしょうか?
ここは仕様を提示して、何かを作ってもらう場所ではありません。

以下のような形で、表示したいということでしょうか?
AAT1 , 東京
AAT1 , 札幌
AAT1 , 小松
AAT1 , 大阪
COT , 東京
QFT3 , 成田
LHT2 , 成田
    • good
    • 0
この回答へのお礼

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) { 以下省略

お礼日時:2007/01/31 15:26

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