[pgsql-jp: 29221] Re: 電話番号から住所を検索するSQL
Kei Yanaihara
kei @ easylife.co.jp
2003年 2月 25日 (火) 13:27:32 JST
矢内原@イージーライフです。
プログラムに手間をかけて良いなら・・・。
(PHPです。他の言語の場合適宜変換してください。)
<?php
for ( $len = strlen( $phone ); $len > 1; $len-- ) {
$db_result = pg_exec( $conn, "select addr from tel2addr where tel like
'" . substr( $phone, 0, $len ) . "'" );
$db_result_rows = pg_numrows( $db_result );
if ( $db_result_rows == 0 ) continue;
for ( $row = 0; $row < $db_result_rows; $row++ ) {
/* 結果を出力 */
}
break;
}
?>
# 先頭の0だけでヒットしても無意味だと思うので2文字以上のみ検索してます。
> 藤本です。
>
> Kei Yanaihara さんは書きました:
> >矢内原@イージーライフです。
> >
> >神奈川県藤沢市が0466で、神奈川県厚木市が046で始まり次が6以外で
> >あるなら、以下のようなデータにすれば良いのでは?
> >
> > Table: tel2addr
> > --------------------------------
> > id | tel | addr
> > ----+--------+---------------------
> > 31 | 046([0-5]|[7-9])* | 神奈川県厚木市
> > 32 | 0466* | 神奈川県藤沢市
> >
> >以下のSQLで検索できます。
> >select addr from tel2addr where '電話番号' ~ tel;
> >
>
> とても参考になります。
> SQLは簡単で済みますし、実現可能な方法ですね。
> ですが、もっとSQL側で手間をかける(データに手間をかけない)
> 方法が無いものでしょうか。
>
> 検索結果に冗長なデータが含まれるのは、そもそもデータレコードに
> 冗長性が残っているためで、そういったデータを許すテーブル
> 設計(思想)になっているのだということは、認識しております。
>
> が、実際のデータ収集と整理の手間を考えると、データレコードは
> 増補的に追加できる形が望ましいかな、と考えています。
> つまり、例えば鎌倉市の局番は0467なのですが、これを新たに
> 追加することを考えると、上記データでは、再び厚木市の
> レコードから0467の場合を除外しなければなりません。
> このような手間を発生させたくない、というか、そういった依存
> のあるデータ設計にしたくない、という考えでおります。
--
/**********************************************************/
/* Kei Yanaihara */
/* kei @ easylife.co.jp */
/* */
/* EasyLife Corporation */
/* http://www.easylife.co.jp/ */
/* */
/* TEL : 03 - 5726 - 1080 */
/* : 090 - 4425 - 9748 */
/* FAX : 03 - 5726 - 1090 */
/* */
/* 152-0035 */
/* 1-21-1 Jiyuugaoka */
/* Meguro-ku Tokyo, Japan */
/**********************************************************/
pgsql-jp メーリングリストの案内