[pgsql-jp: 40755] Re: textsearch-jaの全文検索での検索クエリについて

Yasuo Ohgaki yohgaki @ ohgaki.net
2011年 5月 1日 (日) 19:54:11 JST


大垣です。

PostgreSQLの場合、$[数字]でプリペアードクエリのパラメータを指定できます。
下記のクエリだと$1と$2に全く同じ値を入れるのであれば、全く同じ事です。

> なぜ同じものを二つ取得し、区別して置換しているのかが不明なため、
> 理由が知りたいのです。

わかり易さではないでしょうか?
配列の要素1番目が$1、二番目が$2になる、とよく分かるように配慮してのでは
ないかと推測します。

--
Yasuo Ohgaki
yohgaki @ ohgaki.net


2011年5月1日13:21 mituhiro inaba <mit @ inaba.ws>:
> こんにちは、稲葉と言います。
>
> windowsのサーバでpostgres9.0を動かし、
> ある作家の方のweb論文データベースを製作中です、
> 青空文庫のような感じでしょうか。
>
> 全文検索の要望がありtextsearch-jaとMeCabを使用し、
> 当該webや「PostgreSQL徹底入門 第3版」を参考にして基本機能はできました。
>
> 質問は、
> 「PostgreSQL徹底入門 第3版」のサンプルプログラムの中の検索クエリで
>
> // 検索クエリ
>       $sql = "SELECT filename, title, ts_rank(tsv,
> plainto_tsquery('japanese',
>       \$1))::numeric AS score ";
>       $sql .= " FROM manual WHERE tsv @@ plainto_tsquery('japanese', \$2)
>       ORDER BY score DESC";
>
>       // pg_query_params でクエリを実行します。
>       // pg_query_params では、検索文字列をエスケープする必要ありません。
>       $result = pg_query_params($sql, array($_GET['keyword'],
> $_GET['keyword']));
>
> とあって
> ここで変数'keyword'を配列で同じものを二つ取得し、
> sql文内の可変文字列\$1と\$2に順番に置換しています。
>
> なぜ同じものを二つ取得し、区別して置換しているのかが不明なため、
> 理由が知りたいのです。
>
> ちなみに以下のように変数'keyword'を一つのみ取得し、
> sql文内で共用しても結果は同じです。
>
> $sql = "SELECT filename, title, ts_rank(tsv, plainto_tsquery('japanese',
>       \$1))::numeric AS score ";
>       $sql .= " FROM manual WHERE tsv @@ plainto_tsquery('japanese', \$1)
>       ORDER BY score DESC";
>
>       // pg_query_params でクエリを実行します。
>       // pg_query_params では、検索文字列をエスケープする必要ありません。
>       $result = pg_query_params($sql, array($_GET['keyword']));
>
> お分かりになる方おられましたら教えていただければ幸いです。
>
> なお著作権上、
> 支障がありましたら質問引き下げたいと思いますのでご指摘ください。
>
> よろしくお願いします。
>
> 稲葉光宏 mit @ inaba.ws http://inaba.ws
>
>


pgsql-jp メーリングリストの案内