2016-05-20 21 views
1

以下の検索スクリプトを使用して、1つのテーブル列でキーワード検索を実行しています。複数のテーブルフィールドで1つ以上のキーワードを検索

検索ページ:結果ページの

<form name="form_6" method="get" action="results_keywords.asp"> 
<input name="keyword" type="text" placeholder="keyword" size="30"> 
<input id="submit" type="submit" value="search"> 
</form>  

一部:

<% 
Dim rsKeyword__MMColParam 
rsKeyword__MMColParam = "1" 
If (Request.QueryString("keyword") <> "") Then 
    rsKeyword__MMColParam = Request.QueryString("keyword") 
End If 
%> 
<% 
Dim rsKeyword 
Dim rsKeyword_numRows 

Set rsKeyword = Server.CreateObject("ADODB.Recordset") 
rsKeyword.ActiveConnection = MM_cnKeywords_STRING 
rsKeyword.Source = "SELECT * FROM reports WHERE keyword = '" + Replace(rsKeyword__MMColParam, "'", "''") + "' ORDER BY number DESC" 
..... 

これが正常に動作します。 今度は、同じGET検索フィールドを実行して、10個の異なるテーブル列(keyword01、keyword02など)を検索したいと思います。

GET検索フィールドに上記の10種類のテーブルの列で検索される複数のキーワードが含まれている場合は完璧です。 これは可能ですか?どんな助けや提案も大歓迎です。

アクセステーブルからSQLデータベースへの切り替えはできません。

答えて

0

複数の列で1つのキーワードを検索するのか、すべての列にすべてのキーワードを検索するのか、それとも何を検索するのかは完全にはっきりしていません。私はまた、これがためにあったかどうかわからなかったすなわちキーワードが最初の1に入力された10個の入力フィールドは、最初のキーワード欄に行き、2番目のフィールドは、第二カラムなどで行く、以下の最も簡単なオプションと一緒に行きましたAND検索またはOR検索。私は後者を推測した。 (ユーザーはORを選択したりするためにフォームにフィールドを追加することもできます。)

これは、クエリ文字列を使用してはあまりにも扱いにくい得ることができます。その場合は、メソッドを「投稿」に変更し、Request.Querystring()の代わりにRequest.Form()を使用してください。

<form method="get" action="mypage.asp"> 
<p>Enter keyword(s) to search for: 
<% 
For i = 1 to 10 
    Response.Write "<br>Field " & i & ": <input type='text' name='kw" & i & "' size='15'>" 
Next 
%> 
</p> 
<p><input type="submit" value="Search"></p> 
</form> 

<% 
dim i, kw(10), rs, sql 

For i = 1 to 10 
    kw(i) = Request.Querystring("kw" & i) 
    kw(i) = Replace(kw(i),"'","''") '- double up apostrophes 
    '- if this is a form for internal use only, you can stop here. 
    '- Otherwise, try to clean things up a bit. 
    kw(i) = Replace(Replace(kw(i),",",""),";","") '- remove commas and semicolons 
    '- etc. - do whatever you can to ensure the inputs are keywords, not sql statements 
Next 

sql = "SELECT * FROM reports WHERE " 
For i = 1 to 10 
    If kw(i) <> "" Then 
     sql = sql & "(keyword" & Right(100+i,2) & " = '" & kw(i) & "') OR " 
     '- that "Right(...)" business is so that you get keyword01, not keyword1 
    End If 
Next 
sql = Left(sql,Len(sql)-4) '- remove last "OR" 
sql = sql & " ORDER BY number" 
rs = Server.Createobject("ADODB.Recordset") 
rs.ActiveConnection = MM_cnKeywords_STRING 
rs.Source = sql 
... 
%> 
0

これが役立つかどうかを確認してください。

rsKeyword__MMColParam = "1" 
If (Request.QueryString("keyword") <> "") Then 

'Assuming keywords entered in the search field are separated by a comma. 
'Place keywords in an array 
CDArray = Split(Request.QueryString("keyword") , ",") 

'Get the number of keywords entered to use for the loops 
jMax = ubound(CDArray) 
End If 

'create a variable to store the search criteria 
Dim mysearch 

'Use a real field name, e.g, the record id field to use 
'as a beginning dummy search criteria. 
'Makes the following loops easier to add/manage. 
mysearch = " (afieldname <> '')" 


'Loop through the array for each field you want to search. 
'In this case, 10 fields. 
'Adding the results to the variable. 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname1 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname2 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname3 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname4 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname5 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname6 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname7 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname8 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname9 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname10 LIKE '%" & CDArray(j) & "%')" 
next 

'Now add the completed search variable to the select string 
rsKeyword.Source = "SELECT * FROM reports WHERE" & mysearch & " ORDER BY number DESC" 
0

@Martha 私の考えでは、最大を含む10の表の列を使用して1つの入力フィールドを使用して(複数の)キーワード検索を実行することです。 10のキーワード/レポート。内部サーバーエラーにこのコードの結果を使用して

@Craig 。私のミスはどこですか?

<% 
Dim rsKeyword__MMColParam 
rsKeyword__MMColParam = "1" 
If (Request.QueryString("Keyword") <> "") Then 
CDArray = Split(Request.QueryString("Keyword") , ",") 
jMax = ubound(CDArray) 
End If 
%> 
<% 
Dim rsKeyword 
Dim rsKeyword_numRows 
Dim mysearch 

mysearch = " (Keyword01 <> '')" 

for j = 0 to jMax 
mysearch = mysearch & " OR (Keyword01 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (Keyword02 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (Keyword03 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (Keyword04 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (Keyword05 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (Keyword06 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (fieldname07 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (Keyword08 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (Keyword09 LIKE '%" & CDArray(j) & "%')" 
next 

for j = 0 to jMax 
mysearch = mysearch & " OR (Keyword10 LIKE '%" & CDArray(j) & "%')" 
next 

Set rsKeyword = Server.CreateObject("ADODB.Recordset") 
rsKeyword.ActiveConnection = MM_cnKeyword_STRING 

rsKeyword.Source = "SELECT * FROM reports WHERE " & mysearch & " ORDER BY number DESC" 
rsKeyword.CursorType = 0 
rsKeyword.CursorLocation = 2 
rsKeyword.LockType = 1 
rsKeyword.Open() 

rsKeyword_numRows = 0 
%> 
関連する問題