郵便番号を入れると住所が補完される処理の準備のために、郵便局のサイトから自動で郵便番号データをインポートしてみようと思うわけですが、.lzhが解凍できなくてしょんぼり。
yumでlhaをインストールする。
yumでインストールするには、普通のレポジトリにはないので
# yum --enablerepo=rpmforge install lha
とすればOK。もちろんrpmforgeの設定を以下のようにしておくこと。
cat /etc/yum.repos.d/rpmforge.repo # Name: RPMforge RPM Repository for Red Hat Enterprise 5 - dag # URL: http://rpmforge.net/ [rpmforge] name = Red Hat Enterprise $releasever - RPMforge.net - dag #baseurl = http://apt.sw.be/redhat/el5/en/$basearch/dag mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge #mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge enabled = 0 protect = 0 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag gpgcheck = 1
データを見てみる
以下のように、さっそくダサいわけで。(元のデータが悪い)
mysql> select * from punch1_zips limit 10; +---------+---------------+--------------------+-----------------------------------------+ | id | prefecture_id | city | town | +---------+---------------+--------------------+-----------------------------------------+ | 0600000 | 1 | 札幌市中央区 | 以下に掲載がない場合 | | 0640941 | 1 | 札幌市中央区 | 旭ケ丘 | | 0600041 | 1 | 札幌市中央区 | 大通東 | | 0600042 | 1 | 札幌市中央区 | 大通西(1〜19丁目) | | 0640820 | 1 | 札幌市中央区 | 大通西(20〜28丁目) | | 0600031 | 1 | 札幌市中央区 | 北一条東 | | 0600001 | 1 | 札幌市中央区 | 北一条西(1〜19丁目) | | 0640821 | 1 | 札幌市中央区 | 北一条西(20〜28丁目) | | 0600032 | 1 | 札幌市中央区 | 北二条東 | | 0600002 | 1 | 札幌市中央区 | 北二条西(1〜19丁目) | +---------+---------------+--------------------+-----------------------------------------+ 10 rows in set (0.00 sec)
要らないデータは空白にする
「以下に掲載がない場合」ってのは消す。それにしても「以下」ってねぇ。。。
UPDATE punch1_zips set town="" WHERE town = "以下に掲載がない場合";
これで、郵便番号と住所の変換テーブル出来上がり。
インデックス張っておく
よく考えたら、郵便番号から検索するのにインデックスがない。
CREATE INDEX idx_id ON punch1_zips(id);
これでOK。