今回はMySQLデータベースからCSVを出力する方法を紹介します。
MySQLからCSVファイルを出力するにはSELECT INTO 構文でOUTFILEを使う必要があります。
データベースの準備
1.以下のSQLを実行し、データベースを作成する。
CREATE DATABASE comma;
2.以下のSQLを実行し、先程作成したデータベースに接続する。
USE comma
3.以下のSQLを実行し、テーブルを作成する。
CREATE TABLE goods(
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
price int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.テーブルが問題なく作成されているか確認する。
mysql> show create table goods\G;
*************************** 1. row ***************************
Table: goods
Create Table: CREATE TABLE `goods` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`price` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
5.以下のSQLを実行し、作成したテーブルにデータを挿入する。
INSERT INTO `goods` (`id`, `name`, `price`) VALUES (1, 'キャベツ', '700');
INSERT INTO `goods` (`id`, `name`, `price`) VALUES (2, '大根', '580');
INSERT INTO `goods` (`id`, `name`, `price`) VALUES (3, 'きゅうり', '100');
INSERT INTO `goods` (`id`, `name`, `price`) VALUES (4, 'レタス', '498');
INSERT INTO `goods` (`id`, `name`, `price`) VALUES (5, '小松菜', '250');
CSVファイルを出力する
CSVファイルを出力するにはSELECT INTO 構文でOUTFILEを使う必要があります。
SELECT INTO 構文を使うと、ファイルに書き込むことができるようになります。今回は更に、OUTFILEを使って選択された行をファイルに書き込んだ上で、特定の出力形式でファイルを出力できるようにしています。
以下に使用例を記載します。
SELECT フィールド名 FROM テーブル名 INTO OUTFILE’出力したいファイル名’ FIELDS TERMINATED BY '区切り文字' OPTIONALLY ENCLOSED BY '囲み文字';
FIELDS TERMINATED BYは、上記の「区切り文字」の部分で指定した文字でファイル内のフィールドが区切られるようになります。CSVを出力するのであれば、「,」(コンマ)を指定します。
OPTIONALLY ENCLOSED BYは、上記の「囲み文字」の部分で指定した文字でファイル内のフィールドの文字列が囲まれるようになります。フィールドの文字列中にFIELDS TERMINATED BYで指定した文字(CSVであれば「,」)が存在した時のために、「”」(ダブルクォート)を指定しておきます。
実行例:
SELECT * FROM goods
INTO OUTFILE '/Users/kaji/Desktop/goodstable.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';
MySQLに接続し実行した結果、以下のようなファイルが出力されます。
【goodstable.csv】
1,"キャベツ",700
2,"大根",580
3,"きゅうり",100
4,"レタス",498
5,"小松菜",250
参考サイト
昨年大学を卒業したばかりのエンジニアです。CakePHPを勉強中です。拙い部分も多いですがよろしくお願いします。