SQLについて質問です。


クエリによって生成されたテーブルをCSVの添付形式で出力するSQLプログラム命令を書けるかたおりましたら書いください。お願いします。

現在MyAdminを使用しクエリによって生成されたテーブルを出力しているのですが以下の条件で出力しています。

<< MyAdmin 出力条件>>

●フィールド区切り記号: ,(カンマ)
●フィールド囲み記号: ""(ダブルクォーテーション)
●フィールドのエスケープ記号: \(円マーク)
●行の終端記号: AUTO
●NULL の代替文字列: NULL

● ファイルに保存する にチェックを入れる
● ファイル名のテンプレート _TABLE_ (テンプレートを記憶させるにチェック)
● 圧縮は なし を選択

● SJIS エンコーディングへ変換する を選択
● 全角カナへ変換する にチェックを入れる

MyAdmin では以下の様な注意書きが書いてあります。

このテンプレートは strftime を使って解釈されます。そのため、時間の書式文字列を利用できます。また、次の変換も行われます。__SERVER__/サーバ名, __DB__/データベース名, __TABLE__/テーブル名 それ以外のテキストは修正されません

お時間ありましたらよろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/09/17 13:53:20
  • 終了:2008/09/19 14:46:25

ベストアンサー

id:xxyouxx No.2

xxyouxx回答回数1ベストアンサー獲得回数12008/09/17 16:08:00

ポイント100pt

SELECT *

FROM PRODUCT_KANRI

INTO OUTFILE "product_kanri.xls"

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'


ですよ。[]は不要です。

ちなみに、csv形式で書き出されますので、outfileは.csvか.txtの方が良いのではないでしょうか。

Excel形式(xls)に変換したいのでしたら、PEARでSpreadsheet_Excel_Writerというパッケージがありますので、チャレンジしてみてください。

id:aiomock

ありがとうございます。実行してみます。

2008/09/17 18:29:27

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/09/17 14:19:10

ポイント60pt

ご利用のRDBMSはMySQLですよね。

であれば、SQL文は下記のようになります。

select * from [テーブル名] into outfile "[出力CSVファイル名]" fields terminated by ',' optionally enclosed by '"';

これだと生のままのエンコードで出力されるので、制御プログラム側でShift_JISにエンコード+エスケープする必要があります。

制御プログラムはPHPをご利用ですか? であれば、mb_convert_encoding関数とaddslashes関数を使ってエンコード+エスケープできます。


参考サイト

id:aiomock

ご回答ありがとうございます。試してみます。

制御はPHP,RDBMSはMySQLになります。

2008/09/17 15:13:51
id:xxyouxx No.2

xxyouxx回答回数1ベストアンサー獲得回数12008/09/17 16:08:00ここでベストアンサー

ポイント100pt

SELECT *

FROM PRODUCT_KANRI

INTO OUTFILE "product_kanri.xls"

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'


ですよ。[]は不要です。

ちなみに、csv形式で書き出されますので、outfileは.csvか.txtの方が良いのではないでしょうか。

Excel形式(xls)に変換したいのでしたら、PEARでSpreadsheet_Excel_Writerというパッケージがありますので、チャレンジしてみてください。

id:aiomock

ありがとうございます。実行してみます。

2008/09/17 18:29:27
  • id:aiomock
    pahooさん

    SQLの実行画面で実行してみましたがエラーが発生してしまいました。

    実行した SQL: ドキュメント

    SELECT *
    FROM [PRODUCT_KANRI]
    INTO OUTFILE "[product_kanri.xls]"
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'

    MySQLのメッセージ: ドキュメント
    #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '[PRODUCT_KANRI] into outfile "[product_kanri.xls]" fields termi

    テーブル名とファイル名を記入するだけでは駄目なのでしょうか?
  • id:pahoo
    aiomock さんへ

    テーブル名、ファイル名の [] は不要です。説明の便宜上付けただけです。
  • id:aiomock
    ご回答ありがとうございます。

    []外して実行してみましたが

    #1045 - Access denied for user: 'oskuni7@%' (Using password: YES)

    というエラーが発生してしまいます。対処方法が分かりません。これはどう対処すればいいのでしょうか。
  • id:xxyouxx
    PRODUCT_KANRIにoskuni7というユーザがアクセスできるように設定されていますか?
    phpMyAdminを利用しているならば、phpMyAdminで確認してみてください。

    トップ→左メニューからPRODUCT_KANRIを選択→右画面上の「特権」タブをクリック
    ユーザoskuni7の特権はどうなっていますか?

    もしくはパスワードの設定が正しいか確認してみてください。
  • id:aiomock
    xxyouxx さん

    ご回答ありがとうございます。

    現在サクラサーバーを使用しているのですが特権のタブ見当たりませんでした。

    ローカル環境で実行してみましたがローカルでは実行が可能でした。(ローカルでは特権ありました)

    明日会社へ問い合わせてみようと思います。 

    ありがとうございます。



  • id:aiomock
    最後にですが

    ダウンロードしたCSVファイルをデスクトップ等の特定した場所へ移動させたい時はどうすればいいでしょうか?
    現在ローカル環境でダウンロードするとAPATCHE等があるフォルダに自動的に保存されてしまいます。

    CSVファイルの命令が実行されるとダイアログが発生して保存する場所を指定して保存する

    という事が出来るといいと考えているのですがまた違った処理が必要になってくるのでしょうか?

    お時間あるかたおりましたらよろしくお願いします。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません