1. like '%微星主板%' 会包括 name = '微星主板' 的结果的 --------------------------------------------------------- 只有where name like '%微星主板%'的结果,但又应该怎么样在这个结果里面将最匹配的记录显示在最上面呢? --------------------------------------------------------2. 既然都是 '%微星主板%', 也就没什么最匹配的了,都一样
比如有一条记录标题是 微星主板,第二条记录标题是 最新型号微星主板 我输入微星主板要先让完全匹配的出来,再让 最新型号微星主板 出来 应该如何实现呢? ---------------------------------------- order by name='微星主板' desc
php有算相似度的函数的,就是int similar_text(string first, string second, double [percent]);我认为你可以不实用相似度的。如果客户确定要求这样,可以试一下按照题目的长短进行下排序。当然,这个也只是应付而已。如果记录非常多,计算相似度所消耗的资源是非常恐怖的!还不如使用楼主的方法来的恰当。另一个思路:只适用 where name like '%微星主板%'这个,把结果保存到一个数组里面,然后使用遍历,把是'微星主板'的挑出来。唉~反正这个东西消耗的资源也不小啊~
使用order by 感觉实现不了啊~
Select * From 表 a,表 b Where a.name='微星主板' and b.name<>'微星主板' and b.name like '%微星主板%'估计还是不行
Order By name 可以把完全等于和模糊查询的分开,但是不能保证完全等于的靠前显示。
建议楼上的sql的正则吧,第一次遍历完全匹配的 Select * From 表 a,表 b Where a.name REGEXP '^微星主板$'; 第二次遍历模糊查找,但是完全符合的剔除 Select * From 表 a,表 b Where a.name REGEXP '*微星主板*'AND NOT REGEXP REGEXP '^微星主板$'; 只能把完全符合的放在最前面,相似度的话,真的没有办法,
Select * From 表 a,表 b Where a.name REGEXP '*微星主板*'AND a.name NOT REGEXP REGEXP '^微星主板$'; 少写个field!
foolbirdflyfirst(会飞的菜鸟)你介绍的这篇文章的确不错,可似乎只支持英文的,中文的就不行,搜索中文的算出来的相似度都是1。例如: SELECT infoID,infoTitle,MATCH (infoTitle,infoDetail) AGAINST ('*微星主板*' IN BOOLEAN MODE) AS score FROM tbl_info WHERE MATCH (infoTitle,infoDetail) AGAINST ('*微星主板*' IN BOOLEAN MODE)
---------------------------------------------------------
只有where name like '%微星主板%'的结果,但又应该怎么样在这个结果里面将最匹配的记录显示在最上面呢?
--------------------------------------------------------2. 既然都是 '%微星主板%', 也就没什么最匹配的了,都一样
试试看,是不是你想要的。
我输入微星主板要先让完全匹配的出来,再让 最新型号微星主板 出来
应该如何实现呢?
---------------------------------------- order by name='微星主板' desc
Select * From 表 a,表 b Where a.name REGEXP '^微星主板$';
第二次遍历模糊查找,但是完全符合的剔除
Select * From 表 a,表 b Where a.name REGEXP '*微星主板*'AND NOT REGEXP REGEXP '^微星主板$';
只能把完全符合的放在最前面,相似度的话,真的没有办法,
少写个field!
SELECT infoID,infoTitle,MATCH (infoTitle,infoDetail) AGAINST ('*微星主板*' IN BOOLEAN MODE) AS score FROM tbl_info WHERE MATCH (infoTitle,infoDetail) AGAINST ('*微星主板*' IN BOOLEAN MODE)
首先你这里的相似度是没必要的,你只有两种状态,完全相等和包含.下面的sql是为多单词查询计算的
http://community.csdn.net/Expert/topic/5212/5212541.xml?temp=.7727777
实现你的需求需要数据库支持全文检索功能。而中文全文检索至今也没有很好的得到解决,有关中文全文检索所需的知识和资料你可以先看一下北京大学研究生课件。
全文检索的核心是分词。由于汉语的特殊性,分词变得非常困难。而西文就要简单的多了
我曾尝试将汉字转换成拼音后利用mysql的全文检索功能,但检索是以字为单位而不是以词为单位进行的,结果并不令人满意。但对实现你目前的需求还是绰绰有余的。
在检索中使用串定位函数或like子句都是不幸的,由于不能利用到索引,效率是极低的。
在一些论坛中使用单词表来简化这个问题
tbl_info ORDER BY flag DESC