出来るのだASP Q&A掲示板(過去LOG)
訪問数 52046
昨日 889
今日 776 【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。 |
![]() ![]() ![]() ![]() ![]() |
![]() ![]() |
![]() ![]() |
[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 |