首页 > 解决方案 > MySQL INSTR 按匹配位置排序

问题描述

我正在执行查询以返回表中的值,这些值是字符串 (str) 中包含的子字符串。它正在工作,但现在我想按照它们在给定字符串中出现的顺序对结果进行排序。另外,我希望它返回重复的匹配项,并保持主字符串中的顺序。

这是原始的工作查询:

【当前结果顺序为匹配字段在表中的存储顺序】

select 
    id_ingrediente,
    str,
    root 
from essenzia_ingredientes 
where lang=1 
    AND instr('i\'m listening to music', str) > 0 

这就是我想要做的:

select 
    id_ingrediente,
    str,
    root 
from essenzia_ingredientes 
where lang=1 
    AND instr('i\'m listening to music', str) as ord > 0 
ORDER BY ord ASC

当然这是错误的,但我展示它是为了使我想要实现的目标变得清晰。

标签: mysql

解决方案


您在选择列中创建要排序的列,而不是在 where 子句中:

select 
    `id_ingrediente`,
    `str`,
    `root`,
    instr("i'm listening to music", `str`) as `ord`
from `essenzia_ingredientes` 
where `lang` = 1 
    AND instr("i'm listening to music", `str`) > 0 
ORDER BY `ord` ASC

推荐阅读