700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > MySQL 关键字模糊匹配按照匹配度排序

MySQL 关键字模糊匹配按照匹配度排序

时间:2020-09-04 03:37:48

相关推荐

MySQL 关键字模糊匹配按照匹配度排序

MySQL 关键字模糊匹配,并按照匹配度排序。

方式一、按照关键字搜索,然后根据关键字所占比例排序

SELECTdrug_name,pinyinFROMtbl_drugWHEREpinyin LIKE '%AM%'ORDER BYLENGTH(pinyin);

效果如下

方式二、将关键字开头记录排序在前

SELECTdrug_name,pinyinFROMtbl_drugWHEREpinyin LIKE 'AM%'UNIONSELECTdrug_name,pinyinFROMtbl_drugWHEREpinyin LIKE '%AM%';

效果如下

方式三、将关键字开头排序在前,再根据匹配度排序记录

SELECTdrug_name,pinyinFROM(SELECTdrug_name,pinyinFROMtbl_drugWHEREpinyin LIKE 'AM%'ORDER BYLENGTH(pinyin)LIMIT 999999) t1UNIONSELECTdrug_name,pinyinFROM(SELECTdrug_name,pinyinFROMtbl_drugWHEREpinyin LIKE '%AM%'ORDER BYLENGTH(pinyin)LIMIT 999999) t2LIMIT 0,20;

结果如下,这块中文 “()” 所占长度较大。在此有一个问题,子查询的排序无效,如果子查询中 order by 不带 limit,会被优化器干掉

以上方式为网上整理总结,下面这个方式为个人改进

方式四、先根据关键字所在字段 index 排序,然后再根据匹配度排序

SELECTdrug_name,pinyinFROMtbl_drugWHEREpinyin LIKE '%AM%'ORDER BYLENGTH(substring_index(pinyin,'AM',1)),LENGTH(pinyin)LIMIT 0,20

效果如下

延伸版:

SELECTdrug_name,pinyin FROMtbl_drug WHERELOCATE( "阿", pinyin ) > 0 OR LOCATE( "阿", drug_name ) > 0 ORDER BYLOCATE( "阿", pinyin ),LOCATE( "阿", drug_name ),LENGTH( pinyin );

结果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。