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

検索エンジンを作っているのですが   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]

[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文を変化させるにはどうすればいいのでしょうか。
どなたかアドバイスいただけますか。

[3986] Re:検索エンジンを作っているのですが
投稿者:fujiさん 2004/01/20 16:19:32
こんにちわ Karyさん

ASPが動く環境がないので、ちゃんと動くコードになってないと思いますので、
参考程度に見てください。

strWord = Request.Form("word")
strJyoken = ""
If (タイトルから検索) Then
  strJyoken = "tb2.title"
  Select Case (検索タイプ)
  Case (部分一致)
    strJyoken = strJyoken & " like '%" & strWord & "%' "
  Case (前方一致)
    strJyoken = strJyoken & " like '" & strWord & "%' "
  Case (後方一致)
    strJyoken = strJyoken & " like '%" & strWord & "' "
  End Select
End If
If (著者名から検索) Then
  If strJyoken <> "" Then
    strJyoken = strJyoken & " OR "
  End If
  strJyoken = "tb2.name"
  Select Case (検索タイプ)
  Case (部分一致)
    strJyoken = strJyoken & " like '%" & strWord & "%' "
  Case (前方一致)
    strJyoken = strJyoken & " like '" & strWord & "%' "
  Case (後方一致)
    strJyoken = strJyoken & " like '%" & strWord & "' "
  End Select
End If

StrSQL = "select tb1.category,tb2.title,tb2.name from tb1,tb2 _
where (tb1.cateid) = (tb2.cateid) and ((tb1.category) = '" & Request.Form("cate") & "')" 

If strJyoken <> "" Then
  StrSQL = StrSQL & " and (" & strJyoken & ")"
End If

[3987] Re:検索エンジンを作っているのですが
投稿者:Karyさん 2004/01/20 16:56:29
こんにちは、fujiさん。
こんなにレス早くくださってどうもありがとうございます!
全然何をどうやっていいかわからない状態だったので
とても参考になります!
なんとかがんばってみます。
本当にどうもありがとうございました!



TreeBBS For ASP V.0.1.3
Program By YasNet