查询DW站内搜索代码步骤

站内搜索代码  时间:2021-01-27  阅读:()

用DW MX造站内搜索

有关用DW MX制作站内搜索的问题贴子在论坛不断地有人提问 因此也就出了这一篇教程希望对你有所帮助。站内搜索可分为单参数根据一个条件查询一个字段查询和多参数多个条件可选查询不同的数据库字段查询单参数查询在DW MX的简单记录集中把筛选条件选择为“包含”就行了这时切换到“高级记录集”模式SQL语句如下

SELECT *

FROM user

WHERE uesr LIKE '%MMColParam%'user为要查询的数据库表 uesr为要查询的字段 MMColParam为查询变量从表单提交数据时把文本域的值赋值给该变量 %%为通配符 LIKE为逻辑运算符意为“类似于” 用于搜索包含关键词的记录。 以上这些代码是DW MX自动生成的 比较简单。下面我们要实现的是多参数查询 即多个条件查询多个数据库字段把符合搜索条件的记录筛出。

在动手制作前笔者建议你先看看这个页面http://7294.be23.com/aspbbs/Search.asp

这是本人用DW MX做的多参数站内搜索可根据多个条件查询记录。

实例一、根据两个条件搜索

操作步骤

1、 设计好你的数据库表本例用是论坛贴子表如下图所示

bbs_title字段为贴子标题 bbs_uesr字段为主题作者。现在要求用户可在查询页面选择以标题或作者搜索。

2、新建一个页面保存为HTM或ASP 如果有ASP代码 本例保存为Search.asp。插入表单、一个文本域和一个列表菜单表单方法为GET对应名称和值如下

列表菜单设置以下

页面样式

为了实例示方便搜索界面和搜索结果页在同一个页面中 即Search.asp。

3、插入记录集

启动“记录集”对话框在简单记录集中设置好连接和数据数据库表如下

单击“测试” 应该有记录。切换行“高级”模式如下

添加一个WHERE子句到SQL文本框中如下图

上图中的and bbs_dist=0是为了搜索出为贴子主题的记录你可以删除它如

WHERE MM_sch LIKE '%MM_text%'

变量设置如下

这样一个多参数搜索页面就做成了把记录集相关字段绑定到页面

输入“李飞” 选择“作者” ,搜索结果如下

输入“李飞” 选择“标题” ,搜索结果如下

这里比上例多了一个时间筛选条件bbs_t ima>=now()-MM_t ima,nwo()是获取当前系统日期时间的一个函数,用它减去选定多少天前的变量值 即可筛出发表时间大于或等于多少天前的记录。

以上两例都是单层S QL查询你可以依照以上介绍的方法添AND条件如果要同时查询两个字段除了用AND外还可用OR运算符比如WHEREbbs_title LIKE'%MM_title%' or bbs_uesr LIKE'%MM_uesr%' 它查询bbs_title或者bbs_uesr字段符合搜索条件的记录。但有些记录 比如论坛回复贴子 因为它没有标题 bbs_title字段是空的而我要根据回复内容搜索贴子时就不能显示出主题标题。如何解决这个问题呢用嵌套查询可实现这个目的。

实例三、按标题、作者、回复内容及发表时间搜索记录。

1\把例二中的select列表菜单添多一项“回复内容” 如下图所示

2、修改代码

切换到“代码”视图找到这句代码

技巧为了把标题中关键词以不同颜色显示如上图所示 标题字段值用一个函数替换关键词如下<%=replace( (Recordset1.Fields. Item("bbs_title") .Value) ,request.QueryString("text") , "<fontcolor='#FF0000'>"&request.QueryString("text")&"</font>")%>

把(Recordset1.Fields. Item("bbs_title") .Value)换成你的字段并且将text修改为你设计的文本域名称。实例二根据标题、作者和发表时间搜索记录

1、在例一的基础增加一个列表菜单名称为t i ma,设置如下

上图中的“不选定条件”值为空稍后在记录集中设置它的默认值。其它的你自己可以任意添加选项和时间一天前值为1一年前值为365依此类推。

2、打开高级记录集设置如下

上图那个MM_t ima变量的默认值99999999是刚才“不选条件”值为空时返回99999999 即查询99999999天前的记录这个数值你可以自已设置如果不选定时间就查询你的数据中第一条记录插入时的时间这样就搜索数据库的全部记录了。

Recordset1.Source = "SELECT * FROM bbs WHERE " + Replace(Recordset1__MM_sch, "' ", "' ' ") + " LIKE '%"+ Replace(Recordset1__MM_text, "' ", "' ' ") + "%'and bbs_tima>=now()-" + Replace(Recordset1__MM_tima,"' ", "' ' ") + " and bbs_dist=0 ORDER BY bbsID DESC"

这是记录集SQL查询语句把它改为

Recordset1.Source = sql

然在在记录集代码段的第一行输入dim sqlif Recordset1__MM_sch="bbs_book" thensql=" SELECT *FROM bbs WHERE bbsID IN (SELECT bbs_dist FROM bbs WHERE " + Replace(Recordset1__MM_sch,"' ", "' ' ") + " LIKE '%" + Replace(Recordset1__MM_text, "' ", "' ' ") + "%'and bbs_tima>=now()-" +Replace(Recordset1__MM_tima, "' ", "' ' ") + " and bbs_dist<>0 ORDER BY bbsID DESC) ORDER BY bbsID DESC"elsesql="SELECT * FROM bbs WHERE " + Replace(Recordset1__MM_sch, "' ", "' ' ") + " LIKE '%" +Replace(Recordset1__MM_text, "' ", "' ' ") +"%'and bbs_tima>=now()-" +Replace(Recordset1__MM_tima, "' ","' ' ") + " and bbs_dist=0 ORDER BY bbsID DESC"end if

放入位置下图选中部分 

以上代码的简要说明

由于要用到嵌套查询所以使用判断语句根据用户选定的条件切换SQL语句 比如当用户选择“回复内容”时菜单列表返回值为“bbs_book” ,执行下面这一段SQL语句sql=" SELECT *FROM bbs WHERE bbsID IN (SELECT bbs_dist FROM bbs WHERE " + Replace(Recordset1__MM_sch,"' ", "' ' ") + " LIKE '%" + Replace(Recordset1__MM_text, "' ", "' ' ") + "%'and bbs_tima>=now()-" +Replace(Recordset1__MM_tima, "' ", "' ' ") + " and bbs_dist<>0 ORDER BY bbsID DESC) ORDER BY bbsID DESC"这是嵌套查询的语句小括号 内的是子级查询把符合搜索条件的记录筛出然后把bbs_dist 注这个字段记录主题ID号对应所回复的主题的ID号字段的值以列表形式返回主查询继续下一次查询 比如程序执行时 ()内的SQL语句优先执行筛出符合条件的记录后把它的bbs_dist的值返回主查询查询如下SELECT * FROM bbs WHERE bbsID IN (12,35,41,45,87. . . )

这样主查询语句就能把bbsid ID号等于12、 35、 41、 45、 87的记录全部筛出而这些记录都是有标题的贴子。 bbs_dist<>0表示只查询所有回复内容不查询主题内容。

须要注意的是子查询SELECT子句只能返回一个字段的值如SELECT bbs_dist否则将报错若写成这样 SELECTbbs_dist,bbs_id

报错如下

如果不是选中“回复内容” 将由else切换为sql="SELECT * FROM bbs WHERE " + Replace(Recordset1__MM_sch, "' ", "' ' ") + " LIKE '%" +Replace(Recordset1__MM_text, "' ", "' ' ") +"%'and bbs_tima>=now()-" +Replace(Recordset1__MM_tima, "' ","' ' ") + " and bbs_dist=0 ORDER BY bbsID DESC"

以上这段代码是单层查询和第二例SQL语句是一样的。

好了关于用DW MX做站内搜索就讲到这里只要核心原理都告诉给你了 留一些思考的空间给你吧 自己去试验扩展它的功能。俺没时间了就此告别。 886!

下面是搜索结果页源代码搜索页和结果页合拼在一起实际上应把它分离开来 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>

<!--#include file="Connections/new.asp" -->

<%

Dim Recordset1__MM_text

Recordset1__MM_text = "1"

If (request.QueryString("text") <> "") Then

Recordset1__MM_text = request.QueryString("text")

End If

%>

<%Dim Recordset1__MM_sch

Recordset1__MM_sch = "1"

If (request.QueryString("select") <> "") Then

Recordset1__MM_sch = request.QueryString("select")

End If%>

<%Dim Recordset1__MM_tima

Recordset1__MM_tima = "99999999"

If (request.QueryString("tima") <> "") Then

Recordset1__MM_tima = request.QueryString("tima")

End If%>

<%dim sqlif Recordset1__MM_sch="bbs_book" then

sql=" SELECT * FROM bbs WHERE bbsID IN (SELECT bbs_dist,bbs_id FROM bbs WHERE " +Replace(Recordset1__MM_sch, "' ", "' ' ") + " LIKE '%" +Replace(Recordset1__MM_text, "' ", "' ' ") + "%'andbbs_tima>=now()-" + Replace(Recordset1__MM_tima, "' ", "' ' ") + " and bbs_dist<>0 ORDER BY bbsID DESC)ORDER BY bbsID DESC"elsesql="SELECT * FROM bbs WHERE " + Replace(Recordset1__MM_sch, "' ", "' ' ") + " LIKE '%" +Replace(Recordset1__MM_text, "' ", "' ' ") +"%'and bbs_tima>=now()-" +Replace(Recordset1__MM_tima, "' ","' ' ") + " and bbs_dist=0 ORDER BY bbsID DESC"end if

Dim Recordset1

Dim Recordset1_numRows

Set Recordset1 = Server.CreateObject("ADODB.Recordset")

Recordset1.ActiveConnection = MM_new_STRING

Recordset1.Source = sql

Recordset1.CursorType = 0

Recordset1.CursorLocation = 2

Recordset1.LockType = 1

Recordset1.Open()

Recordset1_numRows = 0%>

<%Dim Repeat1__numRows

Dim Repeat1__index

Repeat 1__numRows = 20

Repeat1__index = 0

Recordset1_numRows = Recordset 1_numRows + Repeat1__numRows%>

<html><head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>用DW MX打造站内搜索</title>

</head>

<body>

<form name="form1" method="get" action="">

<p>关键词

<input name="text" type="text" id="text" value="<%=request.QueryString("text")%>">

选择条件

<select name="select">

<option value="bbs_uesr+bbs_title" <%If (Not isNull (request.QueryString("select") ) ) Then If("bbs_uesr+bbs_title" = CStr(request.QueryString("select") ) ) Then Response.Write("SELECTED") :Response.Write("")%>>不选定条件</option>

<option value="bbs_uesr" <%If (Not isNull (request.QueryString("select") ) ) Then If ("bbs_uesr" =CStr(request.QueryString("select") ) ) Then Response.Write("SELECTED") : Response.Write("")%>>作者</option>

<option value="bbs_title" <%If (Not isNull (request.QueryString("select") ) ) Then If ("bbs_title" =CStr(request.QueryString("select") ) ) Then Response.Write("SELECTED") : Response.Write("")%>>标题</option>

<option value="bbs_book" <%If (Not isNull (request.QueryString("select") ) ) Then If ("bbs_book" =CStr(request.QueryString("select") ) ) Then Response.Write("SELECTED") : Response.Write("")%>>回复内容</option>

</select>

<br>

选择时间

<select name="tima" id="tima">

<option value="" <%If (Not isNull (request.QueryString("tima") ) ) Then If ("" =CStr(request.QueryString("tima") ) ) Then Response.Write("SELECTED") : Response.Write("")%>>不选定条件</option>

<option value="7" <%If (Not isNull (request.QueryString("tima") ) ) Then If ("7" =

CStr(request.QueryString("tima") ) ) Then Response.Write("SELECTED") : Response.Write("")%>>一周前</option>

<option value="31" <%If (Not isNull (request.QueryString("tima") ) ) Then If ("31" =CStr(request.QueryString("tima") ) ) Then Response.Write("SELECTED") : Response.Write("")%>>一个月前</option>

<option value="182" <%If (Not isNull (request.QueryString("tima") ) ) Then If ("182" =CStr(request.QueryString("tima") ) ) Then Response.Write("SELECTED") : Response.Write("")%>>半年前</option>

<option value="365" <%If (Not isNull (request.QueryString("tima") ) ) Then If ("365" =CStr(request.QueryString("tima") ) ) Then Response.Write("SELECTED") : Response.Write("")%>>一年前</option>

</select>

<input type="submit" name="Submit" value="搜索">

<br>

</f orm>

<table width="666" border="0" cellpadding="0" cellspacing="1" bgcolor="#FFCC33">

<tr bgcolor="#FFCC66">

<td width="291">标题</td>

<td width="156">作者</td>

<td width="219">发表时间</td>

</tr>

<% Whi le ( (Repeat1__numRows <> 0) AND (NOT Recordset1.EOF) ) %>

<tr bgcolor="#FFFFFF">

<td><%=replace( (Recordset1.Fields. Item("bbs_title") .Value) ,request.QueryString("text") , "<fontcolor='#FF0000' >"&request.QueryString("text")&"</font>")%></td>

<td><%=(Recordset1.Fields. Item("bbs_uesr") .Value)%></td>

<td><%=(Recordset1.Fields. Item("bbs_tima") .Value)%></td>

</tr><% Repeat1__index=Repeat1__index+1

Repeat 1__numRows=Repeat 1__numRows-1

Recordset1.MoveNext()

Wend %>

</tabl e>

</body>

</html>

<% Recordset1.Close()

Set Recordset1 = Nothing %>

哪里购买香港云服务器便宜?易探云2核2G低至18元/月起;BGP线路年付低至6.8折

哪里购买香港云服务器便宜?众所周知,国内购买云服务器大多数用户会选择阿里云或腾讯云,但是阿里云香港云服务器不仅平时没有优惠,就连双十一、618、开年采购节这些活动也很少给出优惠。那么,腾讯云虽然海外云有优惠活动,但仅限新用户,购买过腾讯云服务器的用户就不会有优惠了。那么,我们如果想买香港云服务器,怎么样购买香港云服务器便宜和优惠呢?下面,云服务器网(yuntue.com)小编就介绍一下!我们都知道...

选择Vultr VPS主机不支持支付宝付款的解决方案

在刚才更新Vultr 新年福利文章的时候突然想到前几天有网友问到自己有在Vultr 注册账户的时候无法用支付宝付款的问题,当时有帮助他给予解决,这里正好顺带一并介绍整理出来。毕竟对于来说,虽然使用的服务器不多,但是至少是见过世面的,大大小小商家的一些特性特征还是比较清楚的。在这篇文章中,和大家分享如果我们有在Vultr新注册账户或者充值购买云服务器的时候,不支持支付宝付款的原因。毕竟我们是知道的,...

百纵科技(1399元/月)香港CN2站群232IP

湖南百纵科技有限公司是一家具有ISP ICP 电信增值许可证的正规公司,多年不断转型探索现已颇具规模,公司成立于2009年 通过多年经营积累目前已独具一格,公司主要经营有国内高防服务器,香港服务器,美国服务器,站群服务器,东南亚服务器租用,国内香港美国云服务器,以及全球专线业务!活动方案:主营:1、美国CN2云服务器,美国VPS,美国高防云主机,美国独立服务器,美国站群服务器,美国母机。2、香港C...

站内搜索代码为你推荐
浏览器哪个好目前什么浏览器最好用?视频制作软件哪个好什么视频编辑软件比较适合小白的滚筒洗衣机和波轮洗衣机哪个好波轮洗衣机和滚桶洗衣机哪个好?哪个更实用?电脑管家和360哪个好电脑管家和360卫士哪个好?燃气热水器和电热水器哪个好电热水器和燃气热水器的优缺点,那个更实用?少儿英语哪个好少儿英语哪个比较好?朱祁钰和朱祁镇哪个好历史上真实的明英宗是怎么样的?性格之类的。朱祁钰和朱祁镇的相关的最好可以详细点的手机杀毒软件哪个好手机杀毒软件那个好用手机音乐播放器哪个好手机音乐播放器哪个好无纺布和熔喷布口罩哪个好表层水刺布,中间层pp无纺布+熔喷布,里层pp无纺布口罩好吗?
域名升级访问 highfrequency 最好看的qq空间 丹弗 个人空间申请 华为网络硬盘 php空间申请 新天域互联 刀片服务器的优势 域名转入 hostease 阿里云邮箱怎么注册 hdsky shuangcheng 腾讯服务器 九零网络 fatcow winds pptpvpn 神棍节 更多