[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 メーリングリストの案内