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

闲来无事,也很久没有写博文,就说说最近做的一个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.程序的扩展性如何? 

 

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

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值