我正在执行查询以返回表中的值,这些值是字符串(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


当然这是错误的,但是我将其展示出来是为了使我清楚要实现的目标。

最佳答案

您可以在选择列中而不是在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

关于mysql - MySQL INSTR通过匹配位置进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50465720/

10-16 06:43