用asp製作多關鍵字搜索(轉)

用asp製作多關鍵字搜索(轉)
   
 
      在書寫實現這個功能的過程中,我們會使用幾個非常重要的asp函數,先來了解一下:

Split()

函數將一個字符串分割並返回分割結果

表達式 Split (S[,d])

實例:<%V= Split(A,B,C)

For i = 0 To UBound(V)

Response.Write V(i)

Next

%>

返回結果: A B C

UBound()

函數返回指定數組維數的最大可用下標>.

表達式 Ubound(arrayname [, dimension])

實例: <%

i = Array("Monday","Tuesday","Wednesday")

response.write UBound(i)

%>

返回結果: 2

Rtrim()

函數去掉字符串右邊的字符串.

表達式 Rtrim(string)

LTrim()

函數去掉字符串左邊的空格.

表達式 LTrim(string)

REPLACE()

函數REPLACE()是最有用的字符串函數之一。你可以使用REPLACE()函數,以一個字符串取代另一個字符串的一部分。

下面咱們來看看實現的方法和代碼:

searchdata=request("T1") '從文本框中獲得輸入的關鍵字
if trim(searchdata)="" then '如果沒有關鍵字的輸入或者只輸入的空格,警告!
response.write "<script>alert('請輸入查詢搜索關鍵字!');history.back();</script>"
response.end
end if

searchdata=replace(searchdata,"'","’")'將獲得的字符串中英文單引號換成中文單引號
searchdata=Rtrim(LTrim(searchdata))'去掉獲得的字符串最左邊空格和最右邊空格


sql1="" '網站關鍵字匹配sql語句
sql2="" '網站標題匹配sql語句
sql3="" '網站簡要說明匹配sql語句

searchdatatmp=split(searchdata," ") '將輸入的字符串根據空格分開,獲得一個數組
max=ubound(searchdatatmp) '得出這個數組的維數,即輸入的關鍵字個數

if max=0 then '如果max等於0說明只輸入了一個關鍵字,那麼就不需要循環處理
sql1=sql1&" key like '%" & searchdatatmp(i) & "%' " '網站關鍵字模糊搜索
sql2=sql2&" sitename like '%" & searchdatatmp(i) & "%' " '網站標題模糊搜索
sql3=sql3&" faq like '%" & searchdatatmp(i) & "%' " '網站簡要說明搜索
else '如果含有多個關鍵字,採用循環處理sql語句
for i=0 to max '如果關鍵字很多,我們要求每一個搜索都要匹配每一個關鍵字,通過循環來實現
if i=0 then '寫入下面sql語句作爲開頭,仔細研究一下下面的代碼
sql1=sql1&" (key like '%" & searchdatatmp(i) & "%' and "
sql2=sql2&" (sitename like '%" & searchdatatmp(i) & "%' and "
sql3=sql3&" (faq like '%" & searchdatatmp(i) & "%' and "
else
if i=max then '如果循環到最後一個關鍵字,寫入下面sql語句作爲結尾
sql1=sql1&" key like '%" & searchdatatmp(i) & "%') "
sql2=sql2&" sitename like '%" & searchdatatmp(i) & "%') "
sql3=sql3&" faq like '%" & searchdatatmp(i) & "%') "
else '如果關鍵自己不是開頭的也不是結尾的,那麼循壞寫入下面的sql語句
sql1=sql1&" key like '%" & searchdatatmp(i) & "%' and "
sql2=sql2&" sitename like '%" & searchdatatmp(i) & "%' and "
sql3=sql3&" faq like '%" & searchdatatmp(i) & "%' and "
end if
end if
next '循環結束
end if


sql="select * from www where "&sql1&" or "&sql2&" or "&sql3

response.write sql '看看我們這個代碼運行的結果是否正確

    在文本框中輸入“網人 俱樂部”,然後點擊搜索,記住表單的action="文件名",這個文件裏包含以上的代碼。

    執行結果:select * from www where (key like '%網人%' and key like '%俱樂部%') or (sitename like '%網人%' and sitename like '%俱樂部%') or (faq like '%網人%' and faq like '%俱樂部%')

    可以看出我們寫的代碼是正確的了。下一節我們講解搜索出結果如果排序,以及怎麼實現!

 
 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章