大家在浏览别人网站时可能会看到有的网站有站内搜索功能,那么怎么做站内搜索呢?如果整个站的信息共用一张表数据那当然就简单了,用模糊查找就可以了
sql="select * from mytable where title like ’%"&keyword&"%’ order by id desc"
如果要搜索的数据来自不同的表,表的结构可能相同,也可能不同,那怎么办呢?这时候就要用到union或union all了,union/union all用法详情点击这里查看!
以下是站内搜索数据来自多表的,搜索出的每个标题链接到不同文件(如news表数据肯定链接文件是newsshow.asp,article表数据链接到artshow.asp),复制过去就简单修改就可以使用
news_id,news_title,art_id,art_title分别是news表,article表中的字段
<%keyword=request("keyword") ’接收要查询的关键词
set rs=server.createobject("adodb.recordset")
sql="select * from (select news_id as id,news_title as title,’newsshow.asp?news_id=’ as urlfile from news where news_title like ’%"&keyword&"%’ union all select art_id,art_title,’artshow.asp?art_id=’ as urlfile from article where art_title like ’%"&keyword&"%’)as t order by id desc"
rs.open sql,conn,1,1
do while not rs.eof
response.write "<a href="""&rs("urlfile")&rs("id")&""">"&rs("title")&"</a><br>"
rs.movenext
loop
rs.close
set rs=nothing
%>
这样多表就用多个Union全并记录集就可以了。
注意:用union合并记录集时在各个select中不能含有order by 语句,只能在合并后的记录集中用order by子句排序,记录集中的字段以第一个select中的字段名为准,且查询字段数量,字段类型必须相同
union/union all用法
1、UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。
union只是将两个结果联结起来生成临时表一起显示,并不是联结两个表,
UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]
假设我们有下面二个表,分别某学院对各个系统各专业的人数统计:外语系统,管理系统
dpenglish
id zyname stunum
1 外贸英语专业 25
2 商务英语专业 30
3 英语翻译专业 35
dpmanage
id zhuanye studentnum
1 信息管理专业 60
2 企业管理专业 30
3 物流管理专业 55
我们要查询这二个系统的人数列表(可能例子不太合适,就这个意思大家看下吧),SQL语句:
SELECT id,stunum FROM dpenglish
UNION
SELECT id,studentnum FROM studentnum
结果:
1 25
1 60
2 30
3 35
3 55
2、Union All
UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。
UNION ALL 的语法如下: [SQL 语句 1]
UNION ALL
[SQL 语句 2]
还用上面的表:SQL语句:
SELECT id,stunum FROM dpenglish
UNION all
SELECT id,studentnum FROM studentnum
结果:
1 25
2 30
3 35
1 60
2 30
3 55
原载: lyhaobao的百度空间 http://hi.baidu.com/lyhabao/blog/item/ecb5d271292a64118601b00c.html