注册 登录
编程论坛 ASP技术论坛

多条件组合查询

wxm198427 发布于 2008-10-22 11:00, 4011 次点击
我有四个条件,第一个:一个部门条件,部门有7到8个,用下拉框,第二:任务完成情况,有已经完成和未完成,用下拉框,第三:一个时间的框,都用下拉框,年一个下拉框,月一个,日一个,再加一个类别,因为我数据库中中有2个字段都是日期时间型的,再有一个下拉框,值有2个是:什么时间,什么时间的。就是以上的条件,当我选至少两个条件时都要搜索出结果,就是说我同时随便输入2个,3个,4个,更多个条件都能搜索出信息,但是只要一个处理接受文件,列出结果,怎么写的那个处理文件,很急现在,请各位指点,赐教……………………
25 回复
#2
hmhz2008-10-22 11:16
<%
Field1 = Request("Field1")
Field2 = Request("Field2")
Field3 = Request("Field3")
Field4 = Request("Field4")
sql="where 1=1"
if Field1<>"" then
   sql=sql&" and Field1='"&Field1&"'"
elseif if Field2<>"" then
   sql=sql&" and Field2='"&Field2&"'"
elseif if Field3<>"" then
   sql=sql&" and Field3='"&Field3&"'"
elseif if Field4<>"" then
   sql=sql&" and Field4='"&Field4&"'"
end if

Set rs=conn.Execute("select * from shopsetup "&sql)
%>
#3
wxm1984272008-10-22 11:17
具体解释一下啊哥们…………特别是后面的那些个查询语句,我字段你也不字段我的是什么字段,但是你大概说个核心概念就行,后面的那个好象是动态的吧?具体说说你的意见………………谢谢你!!比方if Field1<>"" then
   sql=sql&" and Field1='"&Field1&"'"
中的红色什么意思啊,特别是前面的sql&" and,什么意思,是动态的吗?

[[it] 本帖最后由 wxm198427 于 2008-10-22 11:22 编辑 [/it]]
#4
hmhz2008-10-22 11:20
上面的代码是只取其中一个条件,下面的代码是,所有条件只要选择了就可以查询到,叫组合查询
<%
Field1 = Request("Field1")
Field2 = Request("Field2")
Field3 = Request("Field3")
Field4 = Request("Field4")
sql="where 1=1"
if Field1<>"" then
   sql=sql&" and Field1='"&Field1&"'"
end if
if Field2<>"" then
   sql=sql&" and Field2='"&Field2&"'"
end if
if Field3<>"" then
   sql=sql&" and Field3='"&Field3&"'"
end if
if Field4<>"" then
   sql=sql&" and Field4='"&Field4&"'"
end if

Set rs=conn.Execute("select * from shopsetup "&sql)
%>

[[it] 本帖最后由 hmhz 于 2008-10-22 11:25 编辑 [/it]]
#5
wxm1984272008-10-22 11:24
噢,谢谢哥们,你真是我的救命恩人啊,多谢多谢……………………………………多多联系多多联系
#6
hmhz2008-10-22 11:33
第一个的sql="where 1=1" 是创建一个查询条件 1=1 的意思是查询所有内容

下面的sql=sql&" and Field1='"&Field1&"'"  中的 sql&"获取的是上面的sql="where 1=1" 的变量值,意思就是继承下来重新赋值给sql 下面的以此类推,

最后组合起来的效果是
Set rs=conn.Execute("select * from shopsetup where 1=1 and Field1='"&Field1&"' and Field2='"&Field2&"' and Field3='"&Field3&"' and Field4='"&Field4&"'")

[[it] 本帖最后由 hmhz 于 2008-10-22 11:35 编辑 [/it]]
#7
wxm1984272008-10-22 11:40
哥们稍等一下,请问这个,就sql=sql&"  and ,这个什么意思啊?你是说后面的那个SQL要写个SQL语句还是怎么样,还有AND后面的,怎么样解释一下啊!!!
#8
wxm1984272008-10-22 11:46
谢谢解释………………谢谢,非常感谢……
#9
hmhz2008-10-22 11:47
老兄你真是不开窍
sql=sql&"  and 中的sql&" 获取的是上面传下来的变量 sql 这里是调用上面的变量意思
也就是
sql="where 1=1"  '建立查询
if Field1<>"" then '判断Field1不为空
   sql=sql&" and Field1='"&Field1&"'"  '继承上面的sql与Field1='"&Field1&"'组合
end if
if Field2<>"" then
   sql=sql&" and Field2='"&Field2&"'"  '如果上面的Field1不为空就继承Field1的sql变量继续组合,如果上面Field1为空的话,就继承sql="where 1=1"的sql组合
end if
if Field3<>"" then
   sql=sql&" and Field3='"&Field3&"'"  '这个与Field2一样,继续往下继承
end if
if Field4<>"" then
   sql=sql&" and Field4='"&Field4&"'"  '这个与Field2一样,继续往下继承
end if
#10
multiple19022008-10-22 12:25
Dim a
a=5
a=a+5
这句什么意思?
计算a+5表达式的值,赋给变量a,可以认为就是累加。

那么sql=sql & "123"的值就是在sql后面接字符串。
SQL语句中注意条件之间的空格。
#11
wxm1984272008-10-22 14:22
谢谢,太谢谢了,最近这个事有点烦人,嗨,谢谢2位了,呵呵,开窍了哈哈哈哈………………
#12
wxm1984272008-10-22 15:33
组合查询加分页怎么弄呢
我前面做过几个页面,但是条件最多是两个的,那个很好实现分页,就是用SESSION记录那个关键字,在分页里面传递,但是在这是多条件的,而且条件也是不确定的,那怎么实现呢?用SESSION也只能记住一个关键字啊,那怎么实现呢????烦请2位及更多的哥们一同探讨这个,发表一下你们自己的一点意见………………,谢谢!!!!!
#13
sunfishy2008-10-22 16:47
组合查询跟分页有关系?

换个方法写分页.
#14
wxm1984272008-10-22 16:53
回复 2# hmhz 的帖子
大哥,你这句Set rs=conn.Execute("select * from shopsetup "&sql)
有错误吧,或者是应该怎么写?你指点下啊,我运行不了!!!!说的是FROM子句语法错误…………
#15
gupiao1752008-10-22 17:01
[bo][un]hmhz[/un] 在 2008-10-22 11:20 的发言:[/bo]

上面的代码是只取其中一个条件,下面的代码是,所有条件只要选择了就可以查询到,叫组合查询
 

你把完整的SQL语句输出看看哪里有错没?在执行set rs=conn.execute(sql)以前,执行一下response.write sql,然后把该SQL拿到数据库里执行下,应该会给你更详细的提示的
#16
wxm1984272008-10-22 17:02
回复 13# sunfishy 的帖子
大哥不是说有关系,你看啊,比方第一条件加第二条件的结果为10000条,你说要不要分页呢?所以,我要分页,还请大哥指点,还有我有段这样的组合查询代码:
<!--#include file="conn.asp"--><style type="text/css">
<!--
body,td,th {
    font-family: 宋体;
    font-size: 12px;
}
a:link {
    text-decoration: none;
}
a:visited {
    text-decoration: none;
}
a:hover {
    text-decoration: none;
}
a:active {
    text-decoration: none;
}
-->
</style>
<table align="center" border="1" cellpadding="0" cellspacing="0" bordercolorlight="#000000">
<tr bgcolor="#3399FF" align="center">
<td>编号</td>
<td>需求部门</td>
<td>需求人员</td>
<td>需求人电话</td>
<td>需求完成时间</td>
<td>故障标题</td>
<td>执行人</td>
<td>分配完成时间</td>
<td>执行状况</td>
<td>分配情况</td>
<td>详情</td>
</tr>
<%dim rs,sql,nd_depart,years,months,days,times,do_type,nd_data
nd_depart=request("nd_depart")
years=request("years")
months=request("months")
days=request("days")
times=request("times")
do_type=request("do_type")
set rs=server.CreateObject("adodb.recordset")
sql="select * from [nd_msg] where 1=1"
if nd_depart<>"" then
sql=sql&" and nd_depart='"&nd_depart&"'"
end if
if do_type<>"" then
sql=sql&" and do_type='"&do_type&"'"
end if
if years<>"" and months<>"" and days<>"" and times<>"" then
nd_data=years&"-"&months&"-"&days
select case times
case "制单时间"
sql=sql&" and wrt_time='"&nd_data&"'"
case "需求完成时间"
sql=sql&" and nd_data='"&nd_data&"'"
end select
end if
'rs.open sql,conn,1,3
set rs=conn.execute("select * from [nd_msg] "&sql)
do while not rs.eof
'rs.pagesize=10
'page=cint(request("page"))
'if page<=0 then page=1
'if page="" then page=1
'rs.absolutepage=page
%>

<%'for i=0 to rs.pagesize-1
'if rs.eof or rs.bof then exit for
%>
<tr>
<td><%=rs("id")%></td>
<td><%=rs("nd_depart")%></td>
<td><%=left(rs("nd_name"),5)%></td>
<td><%=rs("nd_tel")%></td>
<td><%=rs("nd_data")%></td>
<td><%=left(rs("nd_title"),8)%></td>
<td><%=rs("do_man")%></td>
<td><%=rs("do_time")%></td>
<%if rs("do_type")=1 then%>
<td>已完成</td>
<%else%>
<td>未完成</td>
<%end if%>
<%if rs("agn_type")=1 then%>
<td>已分配</td>
<%else%>
<td>未分配</td>
<%end if%>
<td><a href="viewresult.asp?id=<%=rs("id")%>">详情</a></td>
</tr>
<%rs.movenext()
loop%>
</table>
<%conn.close%>
就那个组合查询部分的代码,你看有问题吗?肯定有,因为查询不出结果,大哥指点下是什么错误吗
谢谢了
#17
gupiao1752008-10-22 17:08
[bo][un]hmhz[/un] 在 2008-10-22 11:16 的发言:[/bo]

 

多条件组合查询一般就是按照HMHZ的这个方法,你说查询不了结果。如果程序没有出现错误,那要嘛数据库里根本没你想要的结果,要嘛是你的SQL语句条件本身就不对。
#18
wxm1984272008-10-22 17:13
set rs=conn.execute("select * from [nd_msg] "&sql)
这个语句后面的那个什么意思呢,错误了,IIS报错了,为什么呢,应该怎么写呢??请指点………………
#19
wxm1984272008-10-22 17:14
回复 15# gupiao175 的帖子
谢谢哥们
#20
hmhz2008-10-22 17:20
我晕死,sql="select * from [nd_msg] where 1=1"
你select * from [nd_msg] 带上干什么,那组合起来不是成了
set rs=conn.execute("select * from [nd_msg] select * from [nd_msg] where 1=1 and ……")
这样子了?
#21
hmhz2008-10-22 17:36
考虑分页的话,就这样写
程序代码:

<table align="center" border="1" cellpadding="0" cellspacing="0" bordercolorlight="#000000">
<tr bgcolor="#3399FF" align="center">
<td>编号</td>
<td>需求部门</td>
<td>需求人员</td>
<td>需求人电话</td>
<td>需求完成时间</td>
<td>故障标题</td>
<td>执行人</td>
<td>分配完成时间</td>
<td>执行状况</td>
<td>分配情况</td>
<td>详情</td>
</tr>
<%
dim rs,sql,nd_depart,years,months,days,times,do_type,nd_data
nd_depart=request("nd_depart")
years=request("years")
months=request("months")
days=request("days")
times=request("times")
do_type=request("do_type")

sql="where 1=1"
if nd_depart<>"" then
    sql=sql&" and nd_depart='"&nd_depart&"'"
end if

if do_type<>"" then
    sql=sql&" and do_type='"&do_type&"'"
end if

if years<>"" and months<>"" and days<>"" and times<>"" then
nd_data=years&"-"&months&"-"&days
select case times
case "制单时间" sql=sql&" and wrt_time='"&nd_data&"'"
case "需求完成时间" sql=sql&" and nd_data='"&nd_data&"'"
end select
end if

set rs=server.CreateObject("adodb.recordset")
rs.open "select * from [nd_msg] "&sql,conn,1,1
do while not rs.eof
rs.pagesize=10
page=cint(request("page"))
if page<=0 then page=1
if page="" then page=1
rs.absolutepage=page

for i=0 to rs.pagesize-1
if rs.eof or rs.bof then exit for
response.write "<tr>"
response.write "<td>"&rs("id")&"</td>"
response.write "<td>"&rs("nd_depart")&"</td>"
response.write "<td>"&left(rs("nd_name"),5)&"</td>"
response.write "<td>"&rs("nd_tel")&"</td>"
response.write "<td>"&rs("nd_data")&"</td>"
response.write "<td>"&left(rs("nd_title"),8)&"</td>"
response.write "<td>"&rs("do_man")&"</td>"
response.write "<td>"&rs("do_time")&"</td>"
if rs("do_type")=1 then
    response.write "<td>已完成</td>"
else
    response.write "<td>未完成</td>"
end if

if rs("agn_type")=1 then
    response.write "<td>已分配</td>"
else
    response.write "<td>未分配</td>"
end if
response.write "<td><a href=""viewresult.asp?id="&rs("id")&""">详情</a></td>"
response.write "</tr>"
rs.movenext
loop
rs.close
response.write "</table>"
conn.close
%>

#22
sunfishy2008-10-22 17:38
sql组合我想你应该理解一下.

sql="select * from table where id=1"

sql=sql&" and name=2"

==
以上的sql语句与下边sql相同

sql="select * from table where id=1 and name=2"

执行的时候直接 conn.execute(sql) 就可以了.
#23
sunfishy2008-10-22 17:41
分页是肯定要分页的.只是跟条件是没有关系的.

不管条件多少.分页只针对记录集的量进行分页..

只有一个条件的时候如果是100条分为5页

那么如果增加一个条件后为1000条..那么自然分页代码就会将其分为50页.

这很好理解哦.

如果分页有问题的话.想下换个方法写分页代码.
#24
sunfishy2008-10-22 17:45
21#思路清晰.可以参考.
#25
wxm1984272008-10-22 20:17
感谢,特别感谢大家,特别特别感谢21楼的兄弟,你给予了我巨大的帮助,谢谢……………………非常谢谢………………
#26
wxm1984272008-10-22 20:45
谢谢哥们
特别谢谢你哥们,21楼的哥们,你真是好人啊,特别谢谢,经过你的努力我终于解决了!!!谢谢
1