重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

MYSQLで読替え(SELECT~CASE)をし、CSVを作成したい

MYSQLは4シリーズを、PHPは5を使用しています。

データベースの値をCSV出力しようとしておりまして、
下記のようなソースを書いています。
現在このソースで作成されるCSVは

日付|行先/要件|交通機関|往/復|証票|金額
2010/4/5|test| 1 | 1 | 2 | 14480

と、言った感じのものなのですが
交通費(USAGE)や往復(ROUND)、証票(CERTIFICATE)
は取得できる数値によって読み替えを行いたいのです。

SELECT~CASE WHEN~END 文で実現できると考え、
phpmyadminで色々ためしているのですが
エラー内容は常に
#1064 - You have an error in your SQL syntax;
で、
ASで項目名を変えている場合、
CASE読み変えはできないのかな等と考えています。

CSVを
日付|行先/要件|交通機関|往/復|証票|金額
2010/4/5|test| 1.電車 | 1.片道 | 2.無し | 14480
と、表示させるにはどう読み替えを行えばよいのでしょうか?

単純にSQL分のミスなのか、そもそもできない事をやろうとしているのか、
いきずまっています。

---ソースここから---
<?php header("Content-Type: application/octet-stream"); ?>
<?php header("Content-Disposition: attachment; filename=output.csv"); ?>
<?php
$csv_flg = 1;
$doc_id = 1;
//接続情報
 $srv = "localhost";
 $id = "aaa";
 $passwd = "bbb";
 $dbn = "ccc";

/* USAGE は0:未選択,1:電車,2:タクシー */
if($csv_flg == 1){
$sql = "SELECT
`REC_DATE`as`日付`,
`USAGE`as`行先/要件`,
`LINE`as`交通機関`,
`ROUND`as`往/復`,
`CERTIFICATE`as`証票`,
`COST`as`金額`
FROM transportation WHERE SEISANSHO_ID = '".$doc_id."' ORDER BY LINE_NO ";

$db=mysql_connect($srv,$id,$passwd);
mysql_select_db($dbn,$db);
$rs=mysql_query($sql,$db);
for($i=0; $i<mysql_num_fields($rs); $i++){
print(mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","UTF8").",");
}
print("\n");

for($j=0 ;$j<mysql_num_rows($rs); $j++) {
for($k=0; $k<mysql_num_fields($rs); $k++) {
$str=mysql_result($rs,$j,$k);
print(mb_convert_encoding($str,"SJIS","UTF8").",");
}
print("\n");
}
mysql_close($db);
}
?>

A 回答 (2件)

まずは正規化した変換テーブルが必要でしょう。


LINE、ROUND、`CERTIFICATE`に対して、JOINでつなぎ、
数値を文字列化してCONCATでつなげばいけそうな感じがします。

>MYSQLは4シリーズ

MySQLは4.0と4.1が機能的にほぼ別物なので4シリーズという書き方は
混乱の元なのでやめましょう
    • good
    • 0
この回答へのお礼

yambejpさん、ありがとうございます。

>変換テーブル
ありがとうございます。
よく考えれば、このテーブルがないのに
整数値で保存されている時点でおかしいなと思うべきでした。

また、MYSQLに関する指摘もありがとうございます。
覚えておきます。

お礼日時:2010/04/07 21:16

読み替え用のマスタテーブルはないのですか?


もし無いようでしたら、PHP側で読み替え処理した方が簡単だと思いますよ。
    • good
    • 0
この回答へのお礼

i80286さん、いつもお世話になっております。

>PHP側で読み替え処理した方が簡単
結果セットを可変変数使ってバラしてifチェック入れて…云々。
と、する事で目的を果たす事ができました。


実はPHPで記述し終わった段になって、
読替用のテーブルの存在を知り2度手間を踏む事になりましたが、
整数値で保存されている時点で
「どこかに読み替え用の文字列を保管してるテーブルがあるのでは?」
と、疑うべきなのだなと、今回知る事ができました。
ありがとうございました。

お礼日時:2010/04/07 21:20

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

関連するカテゴリからQ&Aを探す