MySQL INSTR按匹配位置

时间:2018-05-22 10:43:49

标签: mysql

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

当然这是错误的,但我表明它是为了明白我想要达到的目标。

2 个答案:

答案 0 :(得分:0)

您可以在选择列中创建要按顺序排列的列,而不是在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

答案 1 :(得分:0)

您可以将表达式本身放在order by中,而不是创建列ord,如下所示

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