实现多表不同字段的模糊搜索,并合并显示结果集

来源:互联网 发布:linux开启端口 编辑:程序博客网 时间:2024/05/16 06:20

闲来无事,也很久没有写博文,就说说最近做的一个case里面需要实现一个多字段的跨表模糊搜索的这么一个功能。

需求描述如下~

两个表
Tb_news(id,title,content...)
Tb_product(id,product_name,product_content...)


现在要实现对这两个表的模糊检索,并把结果集合并。

 

返回的结果要求是这样(page,id,tit,con,pubTime),因为我要写一个超链接到结果页的啊,至少我要知道合并前是哪里来的。
page其实是表示从哪个表来的数据,两个表的话page可选的值就news或者product
id就是原表的id值
tit表示title或者product_name
con表示content或product_content

Sql语句如下:

sql="SELECT id,title as tit, content as con,pubTime,'news' as page FROM Tb_News where title like '%" +key+ "%' or content like  '%" +key+ "%' UNION ALL SELECT id, products_name as tit, products_content as con,products_time as pubTime,'product' as page FROM Tb_product where products_name like '%" +key+ "%' or products_content like '%" +key+ "%' ;"

 

Sql语句分析:

这里用到了UNION ALL,关于UNION和UNION ALL,区别就是合并部分还是全部的结果,细节的大家自己再查查书或者网络上的资料吧,还有就是模糊查询时要注意的,%是通配符,匹配所有字符,这是在MS SqlServer下适用的,如果用的是Access,需要用*来替代,如果Access+asp的,通配符要使用%%(就是两个百分号啦),我亲自试过,在Access的查询界面下用*能出来结果,但是同样的语句写到asp程序里就没有结果,asp程序里一定要用%%。如果用C#,或者jsp,都只要针对数据库使用通配符就可以 。

 

实现了描述字段的高亮和缩略显示算法:

我用了比较笨的办法:对一段文字先统计字数,然后判断关键字在这段文字中第一次出现的位置(这个有内置函数的),然后对这个位置向前数10个字符,再往前的截掉并加“...”,往后数40个字符,截掉,并加“...”(当然字符串边缘要做好判断)。高亮算法就直接就Replace代替了,呼呼..

 

仍需解决的问题:

1.搜索结果的排序

2.搜索效率如何?2个表的性能是可以接受的。如果涉及到4个表甚至10个表,效率会怎么样?

3.程序的扩展性如何? 

 

代码不贴了,贴点最后的结果图好啦: