在书写实现这个功能的过程中,我们会使用几个重要的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 '%俱乐部%')

可以看出我们写的代码是正确的了。下一节我们讲解搜索出结果如果排序,以及怎么实现!

-------------------------------------------------------------

方案2:

<%
keyword=trim(request("keyword"))
strkeyword=instr(keyword," ")
if strkeyword=0 then'是否为+号
keyword1=split(keyword,"+")
else
keyword1=split(keyword," ")
end if
Arrayi=ubound(keyword1)
if arrayi=0 then '只有一个关键字时,就不用执行循环了.
sql=sql&" (I_title like '%"&keyword1(i)&"%' or I_Keyword like '%"&keyword1(i)&"%')"
else
for i=0 to Arrayi
if i=0 then'循环到第一个关键词时
sql=sql&" (I_title like '%"&keyword1(i)&"%' or I_Keyword like '%"&Keyword1(i)&"%') and"
else
if i=arrayi then '循环到最后关键词时
sql=sql&" (I_title like '%"&keyword1(i)&"%' or I_Keyword like '%"&Keyword1(i)&"%')"
else
sql=sql&" (I_title like '%"&keyword1(i)&"%' or I_Keyword like '%"&Keyword1(i)&"%') and"
end if
end if
next
end if
%>

改进的类

<%
Class Search
Private objRequest
Private objRs
Private objConn
Private bolExactitude

'*********************************************************
' 初始化/终止程序
'*********************************************************
Private Sub Class_Initialize()
Dim DBPath
'确定使用何种Request集合
If Ucase(Request("Collection")) = "QUERYSTRING" Then
Set objRequest = Request.QueryString
Else
Set objRequest = Request.Form
End If

Set objRs = Server.CreateObject("ADODB.Recordset")
End Sub

Private Sub Class_Terminate()
Set objRequest = Nothing
Set objRs = Nothing
Set objConn = Nothing
End Sub

'*********************************************************
' Set语句: 从外部读取数据库连接对象、查询条件
'*********************************************************
Public Property Let Exactitude(strExactitude)
bolExactitude = strExactitude
End Property

Public Property Set Connection(objConnection)
Set objConn = objConnection
End Property

'*********************************************************
' 私有方法: 模糊查询并“输出结果”
'*********************************************************
Private Function SearchSql()
Dim strItem, strName, strNametmp, strNamemax, Item
Dim sqlF1, sqlF2, sqlF3, sqlSearch
sqlF1 = ""
sqlF2 = ""
sqlF3 = ""
'依次读取输入的多关键字
For Each strItem in objRequest
strName = objRequest(strItem)
Next
strName = Rtrim(Ltrim(strName))     '去掉首尾空格
strNametmp = split(strName, " ")     '将多关键字载入临时数组
strNamemax = Ubound(strNametmp)     '获得临时数组的最大下标

'SQL多关键字查询核心
'单关键字
If bolExactitude = "" Then
If strNamemax = 0 Then
sqlF1 = sqlF1 & " Name LIKE '%" & strName & "%'"
sqlF2 = sqlF2 & " Tel LIKE '%" & strName & "%'"
sqlF3 = sqlF3 & " School LIKE '%" & strName & "%'"
Else
'多关键字
For Item = 0 to strNamemax
If Item = 0 then
sqlF1 = sqlF1 & " (Name LIKE '%" & strNametmp(Item) & "%' OR "
sqlF2 = sqlF2 & " (Tel LIKE '%" & strNametmp(Item) & "%' OR "
sqlF3 = sqlF3 & " (School LIKE '%" & strNametmp(Item) & "%' OR "
Else
If Item = strNamemax then
sqlF1 = sqlF1 & " Name LIKE '%" & strNametmp(Item) & "%') "
sqlF2 = sqlF2 & " Tel LIKE '%" & strNametmp(Item) & "%') "
sqlF3 = sqlF3 & " School LIKE '%" & strNametmp(Item) & "%') "
Else
sqlF1 = sqlF1 & " Name LIKE '%" & strNametmp(Item) & "%' OR "
sqlF2 = sqlF2 & " Tel LIKE '%" & strNametmp(Item) & "%' OR "
sqlF3 = sqlF3 & " School LIKE '%" & strNametmp(Item) & "%' OR "
End If
End If
Next
End If
Else
If strNamemax = 0 Then
sqlF1 = sqlF1 & " [Name] = '"&strName&"'"
sqlF2 = sqlF2 & " [Tel] = '"&strName&"'"
sqlF3 = sqlF3 & " [School] = '"&strName&"'"
End If
End If
sqlSearch = "SELECT * FROM [data] WHERE "&sqlF1&" OR "&sqlF2&" OR "&sqlF3
objRs.Open sqlSearch,objConn,1,1

'输出查询结果
Dim str, str1, str2
If objRs.EOF And objRs.BOF Then
Response.Write "目前通讯录中没有记录"
Else
Do While Not objRs.EOF
'将关键字(单)变成红色
str = Replace(objRs("Name"), strName, "<b style='color:#FF6347'>" & strName & "</b>")
str1 = Replace(objRs("Tel"), strName, "<b style='color:#FF6347'>" & strName & "</b>")
str2 = Replace(objRs("School"),trim(strName),"<b style='color:#FF6347'>" & trim(strName) & "</b>")
Response.Write "姓名:"& str &"电话:"& str1 &"学校:"& str2 &"<br/>"
objRs.MoveNext
Loop
End If
End Function

'*********************************************************
' 公有方法: 由外部调用输出结果
'*********************************************************
Public Function SearchOut()
SearchSql
End Function
End Class
%>

调用类处理
<!-- #include file="searchclass.asp" -->
<%
Dim objFormSearch
Set objFormSearch = New Search

Set objConn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("search.mdb")
objConn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath

'向类中传递数据库连接对象、查询条件
Set objFormSearch.Connection = objConn
objFormSearch.Exactitude = Request("Exactitude")

'调用内部方法输出查询结果
Response.Write objFormSearch.SearchOut()

Response.Write objFormSearch.Out()
%>

表单

<%@ CODEPAGE = "936" %>
<form method="post" action="sfc.asp">
<input type="hidden" name="Collection" value="Form">
<input type="radio" name="Exactitude" value="True">
name:<input type="text" name="name!^d{3}-/d{3}--/d{4}$">
<input type="submit" value="Go">
</form>

************************************************************************

用空格分割的多关键字搜索相关推荐

  1. 我的博客网站开发6——博文关键字搜索

    在页面中,用户可以通过关键字的搜索功能搜索博文.可以实现类似百度和Google的页面搜索功能,可实现多个关键字的搜索.搜索后,在搜索的结果中有关键字的高亮度的提示如: 在搜索的结果页面,模仿Googl ...

  2. [PY3]——字符串的分割、匹配、搜索方法总结

    ?分割.匹配.搜索时可以用到什么样的解决方法? 分割方法总结 1. str.split( ) * 分割字符串 * 返回列表 s1='I love python' # 默认以空格为界定符,且多个空格都当 ...

  3. SQL Server:关键字搜索

    代码 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_search]') and xtype in (N ...

  4. 小程序-输入关键字搜索,关键字在搜索列表中高亮效果

    这里写自定义目录标题 小程序-输入关键字搜索,关键字在搜索列表中高亮效果 小程序-输入关键字搜索,关键字在搜索列表中高亮效果 第一步:按照网上大神写的思路,在截取首位关键字空格方法 出现找不到repl ...

  5. 电商API按关键字搜索商品

    item_search-按关键字搜索商品 公共参数 请求地址: https://console.open.onebound.cn/console/index.php?i=Anzexi 名称 类型 必须 ...

  6. jquery代码实现可输入多关键字搜索下拉框

    参考网站:https://www.edoou.com/articles/1552378028436732 https://blog.csdn.net/xuxiaoyinliu/article/deta ...

  7. JSON 之 SuperObject(16): 实例 - 解析 Google 关键字搜索排名

    同上例类似, 通过 'http://clients1.google.cn/complete/search?&q=' + "关键字" 可以获取 Google 的关键字搜索排名 ...

  8. 应用跳转到AppStore指定关键字搜索界面

    应用跳转到AppStore指定关键字搜索界面 NSString *str = [NSString stringWithFormat: @"https://itunes.apple.com/W ...

  9. c# 用空格分割字符串_C#| 左用空格填充字符串

    c# 用空格分割字符串 PadLeft() method is a library method of the String class. It is used to pad the string f ...

最新文章

  1. http status 汇总
  2. 你必须知道的指针基础-3.指针的移动及指针的危险
  3. 用eclipse生成可运行jar包、启动jar包及常见错误
  4. TF-IDF与余弦相似性的应用(一):自动提取关键词
  5. OSS全球传输加速开启公测,助力企业业务全地域覆盖...
  6. Java并发编程(9):死锁(含代码)
  7. win7 oracle启动监听,win7系统oracle监听服务无法打开的解决方法
  8. centos安装kvm
  9. 如果你觉得 Git 很迷惑人,那么这份小抄正是为你准备的!
  10. 微信收款音响s3服务器断开,微信收款音响s2和s3有什么区别
  11. 我的第一句__asm 语句[很简单]
  12. php 图片单位转换,php如何把图片转换成二进制字符串
  13. 【STM32】各类通信接口及协议简识(IIC、SPI、RS232、RS485、CAN、USB)
  14. 【python】将excel转成json
  15. leetcode955. Delete Columns to Make Sorted II
  16. Xbox One 游戏欣赏: 麦克斯-兄弟魔咒
  17. 关于 tag import 和 page import
  18. MyFirefox v2.6.2 - 打造自己的 Firefox 便携版
  19. 计算机专业网页设计周志,毕业论文(设计)周志范文.doc
  20. CSDN是怎么实现用户签到,统计签到次数,连续签到天数等功能微服务的

热门文章

  1. python学习小记--取整/取余
  2. java手机号码找靓号,选靓号
  3. 【excel技巧】-首行/列固定显示(冻结)
  4. graph学习,GNN综述
  5. CSS定位元素--背景
  6. 世上没有该结婚的年龄,只有该结婚的爱情。其实这个观点我很认同,世上不仅没有该结婚的年龄,也没有注定该一辈子单身的人。只有该结婚的爱情,和该主动的爱情
  7. MySQL中嵌套子查询删除出错解决方案
  8. 一文带你了解卷积网络中的几何学
  9. 【目标检测】|少样本检测
  10. PGA112程控增益放大器