我正在执行查询以返回表中的值,这些值是字符串 (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 INSTR 通过匹配位置进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50465720/