怎么样使用asp实现多关键字搜索?
怎么样使用asp实现多关键字搜索?
在书写实现这个功能的过程中,我们会使用几个非常重要的ASP函数,先来了解一下:
	Split()
	
	函数将一个字符串分割并返回分割结果
	
	表达式Split(S[,d])
	
	实例:<%V=Split(A,B,C)
	
	Fori=0ToUBound(V)
	
	Response.WriteV(i)
	
	Next
	
	%>
	
	返回结果:ABC
	
	UBound()
	
	函数返回指定数组维数的最大可用下标>.
	
	表达式Ubound(arrayname[,dimension])
	
	实例:<%
	
	i=Array("Monday","Tuesday","Wednesday")
	
	response.writeUBound(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 '%俱乐部%')