MySQLで郵便番号を保持するテーブルを作った。

このエントリーをはてなブックマークに追加
はてなブックマーク - MySQLで郵便番号を保持するテーブルを作った。
LINEで送る
Pocket

いやはや避けて通れなくはなってしまったこと。
自社で郵便番号の最新情報を持つ。

なんといっても、一番いやなのが

月1回100件ほどの更新がある郵便番号データ。

そこで、運用は以下のようにする。
・月1回丸ごとデータを入れ替える
 ・時間はかかるけど、差分を積み重ねたときの不整合が出てしまうリスクを回避
 ・更新用のスクリプトを2つ書かなくてすむ。
・入れ替える際に、SQLクライアントから参照不可能になっては困るので、トランザクションをかけてデータを更新。
 ・重いけど、月1回だし、なにより楽。
・いらない情報も念のため持っておく。

ビジネスロジックでは、郵便番号から住所を検索する用途にしか利用しないため、indexは郵便番号だけ。
スキーマは以下の通り。

データをつっこむスクリプト要点(日本語のところは適宜置き換えてね)
トランザクションかけているので途中でデータの挿入に失敗しても、中途半端にならないはず。

ini_set(‘max_execution_time’,600);

$handle = fopen(ふぁいる, ‘r’);

とらんざくしょんはじめ。

れこーどをけす (truncate table postcode)

while (!feof($handle)) {

$line = fgets($handle, 8192);
$line = trim($line);

if(!$line) continue;

// 文字列の処理
$line = str_replace(‘以下に掲載がない場合’, ”,$line);

$field_array = explode(‘,’, $line);

// 文字列の処理
foreach($field_array as &$field){
$field = str_replace(‘”‘,”,$field);
}

// 補足として書いてある括弧を消す
$field_array[5] = mb_ereg_replace(‘(\([^\)]+\))’,”,$field_array[5]);
$field_array[8] = mb_ereg_replace(‘(([^)]+))’,”,$field_array[8]);

えんてぃてぃ作る

てーぶるに いんさーと

}
fclose($handle);

とらんざくしょんこみっと。

あとは、月1回全国のデータをダウンロードして、上記のスクリプトを実行すればダウンタイムなしに、
しかも楽に更新ができる。

余裕があれば、
・上記のURLから自動でファイルをダウンロード
・解凍
・更新プログラム実行
をすれば、全自動で最新の郵便番号データを保持できる!

SQLで直接DBにInsertする方法。

http://plaza.rakuten.co.jp/pgmemo/diary/200512110000/

このエントリーをはてなブックマークに追加
はてなブックマーク - MySQLで郵便番号を保持するテーブルを作った。
LINEで送る
Pocket

matsubokkuri

Please feel free to contact me via e-mail, twitter and facebook!

あわせて読みたい

2件のフィードバック

  1. より:

    これだと京都がおかしくなると思います。

コメントを残す