
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);
}
?>
No.1ベストアンサー
- 回答日時:
まずは正規化した変換テーブルが必要でしょう。
LINE、ROUND、`CERTIFICATE`に対して、JOINでつなぎ、
数値を文字列化してCONCATでつなげばいけそうな感じがします。
>MYSQLは4シリーズ
MySQLは4.0と4.1が機能的にほぼ別物なので4シリーズという書き方は
混乱の元なのでやめましょう
yambejpさん、ありがとうございます。
>変換テーブル
ありがとうございます。
よく考えれば、このテーブルがないのに
整数値で保存されている時点でおかしいなと思うべきでした。
また、MYSQLに関する指摘もありがとうございます。
覚えておきます。
No.2
- 回答日時:
読み替え用のマスタテーブルはないのですか?
もし無いようでしたら、PHP側で読み替え処理した方が簡単だと思いますよ。
i80286さん、いつもお世話になっております。
>PHP側で読み替え処理した方が簡単
結果セットを可変変数使ってバラしてifチェック入れて…云々。
と、する事で目的を果たす事ができました。
実はPHPで記述し終わった段になって、
読替用のテーブルの存在を知り2度手間を踏む事になりましたが、
整数値で保存されている時点で
「どこかに読み替え用の文字列を保管してるテーブルがあるのでは?」
と、疑うべきなのだなと、今回知る事ができました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mysqlがインストールされている...
-
#1062 - '0' は索引 'PRIMARY' ...
-
データベースの接続に失敗して...
-
[XAMPP Control Panel v3.2.4] ...
-
下記の問合せを行うクエリを、P...
-
テーブル名が可変の場合のクエ...
-
テーブル作成時のカラムについて
-
同一日に複数レコードがある場...
-
MAMP 99ドル約1.6万円 高い...
-
あってますか?SQL
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
SQLを作ったのですがうまくいき...
-
(初心者)MySQLやmaraDBで、crea...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてください。
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpで複数のDBを使用した場合の...
-
複数行のクエリを、まとめて実...
-
検索結果がない時の信号の取り...
-
トランザクションが効かない
-
PHPでMySQLテーブルロック一覧取得
-
複数のテーブルのレコードをカ...
-
AUTO_INCREMENT の値をINSERT前...
-
MySQLのテーブルのデータ数のカ...
-
mysqlで表の結合下記のように書...
-
データベースの選択エラー
-
C言語で変数の内容をINSERTする...
-
MYSQLのエラーが解消できない。
-
mysqlがインストールされている...
-
MySQLカラム名は日本語と英数字...
-
ODP.NETのバージョン確認
-
副問合せにLIKE文を使う方法は...
-
SQLのVARCHARとVARCHAR2の違い
-
エクセルで連勤チェックをした...
-
ERROR 1045 (28000) (using pas...
-
旧filemakerで和暦(令和など)...
おすすめ情報