[前][次][番号順一覧][スレッド一覧]

mysql:281

From: Shogo Hamamoto <Shogo Hamamoto <KHC01210@xxxxxxxxxx>>
Date: Sun, 18 Oct 1998 17:17:25 +0900
Subject: [mysql 281] Re: SQL の検索条件について


tommy@xxxxxxxxxx wrote:

> Date: Sun, 18 Oct 1998 05:21:52 +0900
> From: 民斗 <tommy@xxxxxxxxxx>
> Reply-To: mysql@xxxxxxxxxx
> Errors-To: mysql-return-280-KHC01210=nifty.ne.jp@xxxxxxxxxx
> To: mysql@xxxxxxxxxx
>
> MySQL を使った日本語文書検索システムを作ってみました。
>
> が、会社の業務で作ったので、残念ながら公開できません…(^^;
>
> あらかじめ、chasen で文書を単語毎に区切り、名詞だけを抜き出して、
> MySQL で作ったキーワードテーブルに登録しておき、そのテーブルを検索する
> という方式です。
>
> まだサンプルデータの数が少ないですが、期待通り(期待以上かも)の速度で
> 動いてくれてます。
>
> で、一つ質問があります。MySQL というか SQL についての質問なんですが…。
>
> 次のようなテーブル(T)に、文書番号(id)とキーワード(str)を登録してあると
> します。
>
>         create table T (id int not null, str char(32) not null);
>         # index は省略
>
> 1) "hoge" というキーワードと "fuga" というキーワードの両方を含む文書を
>   検索する時は、次のようにできます。
>
>         select a.id from T as a left join T as b using (id)
>         where a.str="hoge" and b.str="fuga";
>
> 2) "hoge" または "fuga" を含むという場合は、次でできます。
>
>         select id from T where str="hoge" or str="fuga";
>
> ここまではいいんですが、もっと複雑な条件の時にどうすればいいのか
> わかりません。例えば、
>
>         「"hoge" または "fuga" を含み、かつ "herohero" も含む」
>
> とか…。しかもそれをプログラムから自動的に生成したいのです。
>
> どうも、1) と 2) の文法が違いすぎて、SQL では1行で書くのは無理のような
> 気がしてるのですが…。
>
> なんかうまい方法があるでしょうか?
> --
> 民斗 <tommy@xxxxxxxxxx>

  2)の構文の方がはるかに効率が良いのですが、プログラム的には
UNIONを使って、検索結果のテーブルを結合する方法が、1)の構文に
近い形で記述できると思います。
 UNIONは、複数のテーブルを(論理的に)結合する命令です。
ちなみに、MySQLのcrash-me(takeshiさんありがとう!)を見ると、MySQL
ではサポートされていない機能でした。(残念)

 参考までに、UNIONは、
 AというテーブルとBというテーブル(テーブルはasで作った仮想テーブルでも良
い)
を結合する場合、
table A UNION table B
と記述できます。AとBのテーブルの形式(フィールドの数等)は必ずしも一致して
いなくても構いません。


[前][次][番号順一覧][スレッド一覧]

->     281 1998-10-18 17:17 [Shogo Hamamoto <KHC0] Re: SQL の検索条件について              
       284 1998-10-20 07:37 ┗[民斗 <tommy@xxxxxxxx]                                       
       286 1998-10-21 17:21  ┗[<takeshi@xxxxxxxxxx>] jp doc (Re: SQL の検索条件について)