sql 模糊查询按匹配度排序的原理

来源:百度知道 编辑:UC知道 时间:2024/05/19 06:36:43
例如,我有数据表如下:
id text
1 中国人民解放军
2 我们都是中国人
3 中国是个伟大的国家
4 中国是1949年解放的
……
假如这样的记录有很多,假设有1000万条那么多。
我需要用sql的like语句查询两个关键字:中国 解放
语句如下:
where text like '%中国%' or text like '%解放%'
这样是能查询数据,但是怎样按匹配度排序?及内容越匹配两个关键字的显示在前面,匹配一个的在后面。
本次先不讨论用like是否高效,只讨论按匹配度排序。

有什么方法吗?原理和过程应该是怎样的?如果有详细代码更好。
用asp也行。

like是不支持匹配程度的。
智能检查匹配或不匹配。

有个想法就是:
select * from 表 where text like '%中国%' or '%解放%'
order by replace(replace(text,'中国',''),'解放','')
这样的想法就是检查text字段包含关键字的数量,数量多的就排在前面
但是不知道有效果怎样。如果这个不行的话,我想就没什么办法在数据库里排序了。
只能在程序里做处理了吧。

这样查询凡是满足的话都会被列出来 如果用户没自定义排序语句的话就会按照 主键升序排序 按楼主说的建议在应用程序中实现 先查询两者都满足的 然后查询一个条件的 然后合并结果集 我只想到这个办法

select text into #A from 表名
where text like '%中国%'
and text like '%解放%'

select text from 表名
where text like '%中国%'
or text like '%解放%'
and text not in (select text from #A)

这样#A 里面就是符合 解放和中国都有的

下面那段不就是只符合一个字段的吗?

你分开查找不就可以了

这样就可以:
SELECT text
FROM aaa
WHERE text Like '*中国*' Or text Like '*解放*'
ORDER BY IIf(InStr(text,'中国')>0,1,0)+IIf(InStr(text,'解放')>0,1,0) DESC;

我使用ACCESS实验的,ORACLE中也应有相应的函数。