根据子字符串位置对搜索结果进行排序

时间:2016-09-28 04:02:15

标签: mysql

id | col1      | col2 |
_________________________
 1 | Aceh     | Denponda
 2 | Aceh     | Bonda Aceh
 3 | Sumatera | Asahan
 4 | Sumatera | Ondanar

我使用此查询

SELECT * FROM table WHERe col2 LIKE '%onda%'

现在这里发生的事情就是显示这样的结果

id | col1      | col2 |
_________________________
 1 | Aceh     | Denponda
 2 | Aceh     | Bonda Aceh
 4 | Sumatera | Ondanar

但是我想要的是id为4的行在WHERE子句onda

的相似性上取最接近的位置

这是我想要的结果

id | col1      | col2 |
_________________________
 4 | Sumatera | Ondanar
 2 | Aceh     | Bonda Aceh
 1 | Aceh     | Denponda

基本上我想要的是相应地对结果进行排序  基于从左到右的col2值,WHERE子句的最近相似度为onda

逻辑上喜欢这个

  • 昂达 nar
  • B onda 亚齐
  • Denp的昂达

注意:id列不能用于排序。

1 个答案:

答案 0 :(得分:2)

您可以按 LOCATE

订购
SELECT 
* 
FROM table 
WHERE col2 LIKE '%onda%'
ORDER BY LOCATE('onda', col2)

注意:

 LOCATE(substr,str), LOCATE(substr,str,pos)
  

第一个语法返回第一次出现的位置   string str中的substring substr。第二种语法返回位置   字符串str中第一次出现substring substr,从   位置pos。如果substr不在str中,则返回0。

或者,您可以使用 INSTR 功能