[pgsql-jp: 26717] Re: Likeの部分一致で検索
Hashimoto, Masaru
hashimoto-m @ comtecc.net
2002年 7月 17日 (水) 14:47:51 JST
橋本です。
森本様、ご返信ありがとうございます。
> このソースは実際のものですか?配列とかで処理してるのでしょうか?
> PHPなどを使用して配列で検索ってのもできると思うのですが。。。
> ついでにヒット件数とデータ取得も1つのセレクトだけで済むような気がするのは私
> だけ?
>
> ちなみに、PHPでの記述例
>
> $sql = "select id from tbl
> where ((keyword1 ILIKE '%".$searchword[0]."%')
> or (keyword2 ILIKE '%".$searchword[0]."%')
> or (keyword3 ILIKE '%".$searchword[0]."%') or ・・・))";
> for ($i=1;$1 < sizeof($searchword);$i++){
> $sql.= "or ((keyword1 ILIKE '%".$searchword[$i]."%')
> or (keyword2 ILIKE '%".$searchword[$i]."%')
> or (keyword3 ILIKE '%".$searchword[$i]."%') or ・・・))";
> }
> $result = pg_exec($dbHandle, $sql); //SQL文実行
>
> $resultNumRows = pg_numrows($result);//検索件数取得
>
> こんな感じだと思うのですが。。。解決にならないかもしれませんが、気になったん
> で
>
現在はJSP+Servletを使用しております。
項目名やテーブルはテスト用に変更しておりますが、
SQL文自体は実際に使用しているものと同じです。
私もはじめは森本様と同じ方法を使って、
・LIMITを使用せずにヒットした全件を取得
・Javaでヒット件数を取得
・必要なレコードのみ一覧に表示する。
という風にしておりました。
ヒット件数が1000件程度でしたら問題なかったのですが、
10,000件とかになってしまうと遅くなってしまいました。
ネットワークトラフィックとかも関係してくるかなと思ってます。
それで、必要なレコードだけ取得する方法に変更しました。
変更したおかげでCountを取らないといけなくなったんですが、
二つのSQL実行をあわせたとしても、件数が多い場合は少し早くなりました。
(件数が少ない場合はあまり変わりません)
やはりこのようにアプリケーションで制御する方法を
考えるのが一番の近道になるかもしれないんですが・・・
頭が固いのでなかなかアイデアが浮かばないんですよね。
pgsql-jp メーリングリストの案内