实现多表不同字段的模糊搜索,并合并显示结果集
来源:互联网 发布: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.程序的扩展性如何?
代码不贴了,贴点最后的结果图好啦:
- 实现多表不同字段的模糊搜索,并合并显示结果集
- mysql 结果集去重复值并合并成一行
- mysql 结果集去重复值并合并成一行
- zTree实现模糊搜索并高亮显示
- 实现DedeCMS搜索结果页显示自定义字段
- easyui-combobox---ajax获取数据库JSON数据,实现搜索框实时显示模糊搜索结果
- 搜索结果的高亮显示实现
- mysql 给检索的条目按照某些字段分组,并合并分组后的多条记录的某列字段的值----laravel
- Android 利用AutoCompleteTextView实现模糊搜索功能,搜索结果自动提示,识别拼音首字母并转汉字提示
- Android 利用AutoCompleteTextView实现模糊搜索功能,搜索结果自动提示,识别拼音首字母并转汉字提示
- 实现“GridView搜索后,显示结果,分页后,仍然显示搜索后的结果”
- sqlsever 一表查询两种条件时间并合并查询结果
- lucene的多个字段搜索以及分页并高亮显示
- hibernate hql 查询指定字段并获取结果集,多表查询结果集
- css实现不同的打印和屏幕显示结果
- ThinkPHP3.2.3---ajaxreturn的应用:一个在搜索框中输入,实时动态显示模糊搜索结果
- iOS 模糊搜索的实现
- asp搜索结果的显示
- AOP理解
- 行为模式-命令模式
- Cassandra+Hector分布式数据库入门到高效实用实例
- 流行的知名JavaScript框架
- TCP - WAIT状态及其对繁忙的服务器的影响
- 实现多表不同字段的模糊搜索,并合并显示结果集
- What‘s the Bluetooth?什么是蓝牙?
- 1006
- Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用
- 别用 pi 了,用 tau 吧!
- 单元测试不完备导致后期调试成本增大
- 移动终端引起的平台之争
- sleep() 和 wait() 的区别
- ps -ef 与 kill -pid