出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

[3985] 検索エンジンを作っているのですが
投稿者:Karyさん 2004/01/20 10:25:45
こんにちは。いつも拝見させていただいています。
検索エンジンを作っているのですが、解らない所があるので教えていただけますか。
検索条件を付加していく時に、SQL文のつなぎ方がわからず困っています。
データベースに保存してあるデータを呼び出すのですが、
まずテーブルが tb1と tb2 の2つあります。
tb1 は cateid (カテゴリID) とcategory(カテゴリ)の2項目です。
tb2 は cateid (カテゴリID)とtitle (タイトル) name (著者名)の3つです。
(テーブルは2つに分けなければならないことになっています。)
検索画面ではカテゴリを指定できるコンボボックス、キーワード欄。
条件として部分一致、前方一致、後方一致があり、このうちの1つを指定できます。
また検索範囲として「タイトルから検索」と「著者名から検索」があります。
検索範囲はチェックボックスとなっており、指定しなくても指定してもよいことになってます。
カテゴリだけを指定した場合は、指定したカテゴリのデータを全て抽出します。
そして、キーワードだけが入力されている場合、そのキーワードのものを全て抽出します。
(タイトルがキーワードのものや、著者名がキーワードのものでもどちらでもよい)
また、カテゴリとキーワードが指定されていれば、そのカテゴリーの中のものでキーワードのものを取り出すという感じです。
私がわからないのは条件を付加するにつれてand や orをどのようにSQL文で繋げていくかということです。
たとえば、
カテゴリが「小説」、キーワードが「A」、検索範囲が「タイトルから検索」であれば、SQL文は

StrSQL = "select tb1.category,tb2.title,tb2.name from tb1,tb2 _
where (tb1.cateid) = (tb2.cateid) (テーブルの結合)
     and ((tb1.category) = '" & Request.Form("cate") & "')" (指定されたカテゴリ)
and ((tb2.title) = '"&Request.Form("word")& "')" (タイトルが「A」のもの)
となりますが、
「著者名から検索」という条件を追加したら、

StrSQL = "select tb1.category,tb2.title,tb2.name from tb1,tb2 _
where (tb1.cateid) = (tb2.cateid) (テーブルの結合)
     and ((tb1.category) = '" & Request.Form("cate") & "')" (指定されたカテゴリ)
and (((tb2.title) = '"&Request.Form("word")& "')" (タイトルが「A」のもの)
or ((tb2.name) = '"&Request.Form("word")& "'))" (著者名が「A」のもの)

というふうに、指定されたカテゴリの後にカッコとorが付加されなければなりません。
ここの所のSQL文の書き方がわかりません。
Ifを使って・・というのはわかるのですが、どう書けばいいのか・・
また部分一致条件とかが付加されると・・と思うと余計解らなくなります。
選ばれた条件によって臨機応変にSQL文を変化させるにはどうすればいいのでしょうか。
どなたかアドバイスいただけますか。

検索エンジンを作っているのですが   Karyさん [2004/01/20 10:25:45] [3985]
  Re:検索エンジンを作っているのですが   fujiさん [2004/01/20 16:19:32] [3986]
    Re:検索エンジンを作っているのですが   Karyさん [2004/01/20 16:56:29] [3987]


TreeBBS For ASP V.0.1.3
Program By YasNet