大家在浏览别人网站时可能会看到有的网站有站内搜索功能,那么怎么做站内搜索呢?如果整个站的信息共用一张表数据那当然就简单了,用模糊查找就可以了 sql="select * from mytable where title like '%"&keyword&"%' order by id desc" 如果要搜索的数据来自不同的表,表的结构可能相同,也可能不同,那怎么办呢?这时候就要用到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 |