2016-05-20 3 views
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

Не совсем ясно, хотите ли вы искать одно ключевое слово в нескольких столбцах или все ключевые слова во всех столбцах или что. Я пошел с самым простым вариантом ниже, т.е. 10 полей ввода, где ключевое слово, введенное в первом, идет с первым столбцом ключевого слова, второе поле идет со вторым столбцом и т. Д. Я также не был уверен, должно ли это быть a AND поиск или OR поиск; Я догадался. (Вы можете добавить поле в форму, чтобы пользователь мог выбрать AND или OR.)

Это может стать слишком громоздким для использования запроса. Если это произойдет, просто измените метод на «пост» и используйте Request.Form() вместо Request.Querystring().

<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 столбцов таблицы, содержащих макс. 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 
%> 
Смежные вопросы