[转]多条件查询代码(同时生成分页转向url)
作者:cmscn 日期:2009-08-13
程序编写过程中经常用到多条件查询,如果条件很多,处理起来是不是会很麻烦?
查询完后要分页,点"下一页"后查询参数没了?
不知道前人是怎么解决的,下面是自己摸索出来的一种方法,使用起来比较方便;
保存下面的代码到example.asp,然后运行example.asp文件,就会看到效果
程序会自动保存提交的查询参数,即使翻页也不会丢失!
<!--获取页面传递过来的参数-->
<%
keyword =trim(request.querystring("keyword"))
YY_Type =trim(request.querystring("YY_Type"))
YY_IS_Check =trim(request.querystring("YY_Is_Check"))
YY_Is_Start =trim(request.querystring("YY_Is_Start"))
YY_Is_End =trim(request.querystring("YY_Is_End"))
%>
<!--获取页面传递过来的参数结束-->
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>多条件查询示例</TITLE>
<style>
BODY {font-size:12px;}
</style>
</HEAD>
<body>
<b>请输入关键字进行搜索</b> :<br />
<!--提交表单开始-->
<form style="display:inline;" name="search" action="" method="get"> <!--注意,必须用get方法提交表单-->
<input id="search" name="keyword" value="<%=keyword%>" />
<select name="YY_Type">
<option value="0" <%if YY_Type="0" then response.write "selected"%>>不限</option>
<option value="2" <%if YY_Type="2" then response.write "selected"%>>仪器预约</option>
<option value="1" <%if YY_Type="1" then response.write "selected"%>>实验室预约</option>
</select>
<select name="YY_Is_Check">
<option value="all" <%if YY_IS_Check="all" then response.write "selected"%>>不限</option>
<option value="0" <%if YY_IS_Check="0" then response.write "selected"%>>未审核</option>
<option value="1" <%if YY_IS_Check="1" then response.write "selected"%>>已经审核</option>
</select>
<select name="YY_Is_Start">
<option value="all" <%if YY_Is_Start="all" then response.write "selected"%>>不限</option>
<option value="0" <%if YY_Is_Start="0" then response.write "selected"%>>未开约</option>
<option value="1" <%if YY_Is_Start="1" then response.write "selected"%>>已经开约</option>
</select>
<select name="YY_Is_End">
<option value="all" <%if YY_Is_End="all" then response.write "selected"%>>不限</option>
<option value="0" <%if YY_Is_End="0" then response.write "selected"%>>未销约</option>
<option value="1" <%if YY_Is_End="1" then response.write "selected"%>>已经销约</option>
</select>
<input type="button" onclick="this.form.submit();" value="搜索" style="width:120px;" />
</form>
<!--提交表单结束-->
<%
page=cint(request.querystring("page")) '获取页面传递过来的分页参数
if page="" or page<1 then page=1 '处理传递过来的分页参数
dim keyword,YY_Type,YY_Is_Check,YY_Is_Start,YY_Is_End '定义变量
dim vs(5) '定义数组,本数组用来存储url参数
vs(0)="":vs(1)="":vs(2)="":vs(3)="":vs(4)="" '初始化
'根据条件开始给数组元素赋值,以确定查询参数
if keyword<>"" then vs(0)="keyword=" & keyword
if YY_Type<>"" then vs(1)="YY_Type=" & YY_Type
if YY_IS_Check<>"" then vs(2)="YY_IS_Check=" & YY_IS_Check
if YY_Is_Start<>"" then vs(3)="YY_Is_Start=" & YY_Is_Start
if YY_Is_End<>"" then vs(4)="YY_Is_End=" & YY_Is_End
'赋值结束
dim conStr(5) '定义数组,本数组存储SQL查询条件
conStr(0)="":conStr(1)="":conStr(2)="":conStr(3)="":conStr(4)="" '初始化
'根据条件开始给数组元素赋值,以确定查询条件
if keyword<>"" then conStr(0)="[YY_User]='" & keyword & "'"
if YY_Type<>"0" and YY_Type<>"" then conStr(1)="[YY_Type]=" & YY_Type
if YY_Is_Check<>"all" and YY_Is_Check<>"" then conStr(2)="[YY_Is_Check]=" & YY_Is_Check '这里排除all值,是all的话就没必要加查询条件了;下同
if YY_Is_Start<>"all" and YY_Is_Start<>"" then conStr(3)="[YY_Is_Start]=" & YY_Is_Start
if YY_Is_End<>"all" and YY_Is_End<>"" then conStr(4)="[YY_Is_End]=" & YY_Is_End
'赋值结束
dim SQLSTR:SQLSTR="" '定义变量,存储组合后的SQL查询条件
dim sendSTR:sendSTR="" '定义变量,存储组合后的url参数
'循环赋值
for i=0 to 4
if conStr(i)<>"" then
if SQLSTR="" then
SQLSTR=" where " & conStr(i) '使用此条件来添加where关键字
else
SQLSTR=SQLSTR & " and " & conStr(i) '关键字and来连接查询条件
end if
end if
if vs(i)<>"" then
sendSTR=sendStr & vs(i) & "&" '直接用&来链接各url参数
end if
next
SQL="Select * from [YYStatus]" & SQLSTR & " order By [ID] DESC" '生成查询SQl
s_url="example.asp?" & sendStr '生成分页转向url,注意example.asp后面的?,一定不要漏了
response.write "<br /><br />生成的SQL查询语句:" & SQL
response.write "<br /><br />生成的分页转向url:" & s_url
response.write "<br /><br />当前在第" & page & "页!"
response.write "<br /><br /><a href=""" & s_url & "page=" & page-1 & """>上一页</a> <a href=""" & s_url & "page=" & page+1 & """>下一页</a>"
%>
</BODY>
</HTML>