高级搜索,牛人进来

taokai 2009-08-28 06:56:32
http://www.lrdiamond.com/diamond/

打开这个地址,请问大家这个钻石搜索那块,怎么实现,那个条件太多了,

高手帮忙
...全文
505 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
number123456 2009-08-29
  • 打赏
  • 举报
回复
对于同一字段多条件你可以用OR来组合
例如
切工=EX,E
if 切工 <> "" then
qg = split(",",切工)'目的就是把切工的两个条件分开
sql = sql & " and (切工=qg(0) or 切工=qg(1))
’构造SQL语句,同一字段,两种条件,那就组合成 and (字段=条件1 或 字段=条件2)
end if
如果你同一个字段有两种条件,你还用and 连接两种条件当然不存在记录,你不可能是查出a=1又a=2的数据
你把同一字段的条件用括号括起来,这样才能被视为括号内为独立的条件
taokai 2009-08-29
  • 打赏
  • 举报
回复
楼上提供了很多方法都很好,

但是大家都忽略了,同一个字段的查询方法,

当你查询的时候,比如

Function sql(a,b,sqls)

if 切工1 <>"" then '如果客户端没有提交此值,则不会产生相应的SQL语句。

sqls=sqls & " and " & 切工 & " like '%" & EX & "%'"

end if

if 切工2 <>"" then '如果客户端没有提交此值,则不会产生相应的SQL语句。

sqls=sqls & " and " & 切工 & " like '%" & VG & "%'"

end if

if 颜色2 <>"" then '如果客户端没有提交此值,则不会产生相应的SQL语句。

sqls=sqls & " and " & 颜色 & " like '%" & i & "%'"

end if

sql=sqls

End Function

下面是执行, 出来的结果为空, 原因是:当你同时查询切工1and切工2and颜色2 这样执行结果为空(切工1和切工2是同一字段)
ZSJ_COOL 2009-08-29
  • 打赏
  • 举报
回复
s=0,0,0,0,0,0,0,0|1,0,0,0,0|0,0,0,0,0,0,0,0|0,6.44|0,0,0,0,0,0,0,0|0,2848000
你这个就是把他切割一下就可以 split
凡夫与俗子 2009-08-29
  • 打赏
  • 举报
回复
学习下lzp4881的方法。mark
xb520hh 2009-08-29
  • 打赏
  • 举报
回复
对,用sql语句拼凑
taokai 2009-08-29
  • 打赏
  • 举报
回复
可以了,谢谢 lzp4881 ,万般无耐
lzp4881 2009-08-28
  • 打赏
  • 举报
回复
我们经常会遇到多重查询问题,而长长的SQL语句往往让人丈二和尚摸不着头脑。特别是客户端部分填入查询条件时,如用普通方法将更是难上加难。

以下巧妙地利用"where 1=1"的恒等式(事实上很多,让它值为TRUE即可)解决此问题。

正文概要

'subject 信息标题

'company 发布信息的公司名称

'content 发布信息的内容

'address 公司地址

'infomation 公司简介

'note 相关说明

以上值均由FORM提交,然后通过:subject=trim(Request.Form("subject"))等得到相应的值。

<%

'这个函数很关键!---------------------------

Function sql(a,b,sqls)

if b<>"" then '如果客户端没有提交此值,则不会产生相应的SQL语句。

sqls=sqls & " and " & a & " like '%" & b & "%'"

end if

sql=sqls

End Function

'-----------------调用数据库

Set conn=Server.CreateObject("ADODB.Connection")

DBpath=Server.MapPath("/database/mydb.mdb")

Conn.Open "driver={Microsoft Access Driver (*.mdb)};pwd=;dbq=" & DBpath

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

sqls="select * from mytable where 1=1 "

'以下调用上面的函数即可,可以很多个调用(理论上是任意)

sqls=sql("subject",subject,sqls)

sqls=sql("company",company,sqls)

sqls=sql("content",content,sqls)

sqls=sql("address",address,sqls)

sqls=sql("infomation",infomation,sqls)

sqls=sql("note",note,sqls)

sqls=sqls & " order by id desc"

rs.open sqls,conn,3,2

%>
taokai 2009-08-28
  • 打赏
  • 举报
回复
能否举个例子
  • 打赏
  • 举报
回复
晕死,条件搜索就只是一个拼凑SQL语句而已
taokai 2009-08-28
  • 打赏
  • 举报
回复
ss.asp?s=0,0,0,0,0,0,0,0|1,0,0,0,0|0,0,0,0,0,0,0,0|0,6.44|0,0,0,0,0,0,0,0|0,2848000

我的传值是利用js 这样传过去的

| 那是间隔 ,0,代表一个值
taokai 2009-08-28
  • 打赏
  • 举报
回复
这样搜索不出来数据呢
number123456 2009-08-28
  • 打赏
  • 举报
回复
sql = "select * from table where 1=1"
if request("型状") <> "" then
sql = sql & " and (型状=圆型 or 型状=方型)"
end if
if request("切工") <> "" then
sql = sql & " and (切工=EX OR 切工=G)"
end if
if request("颜色") <> "" then
sql = sql & " and (颜色=D OR 颜色=E)"
end if
if request("重量") <> "" then
sql = sql & " and (重量 between 0 and 6.44)"
end if
if request("净度") <> "" then
sql = sql & " and (净度=FL or 净度=IF)"
end if
if request("价格") <> "" then
sql = sql & " and (价格 between 0 and 2848000)"
end if
sql = sql & "order by id desc"

这样构造SQL语句己经很明确了吧
taokai 2009-08-28
  • 打赏
  • 举报
回复


请高手指教

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧