MySQL INSTR с порядком сопоставления позиции

Aloe Vera спросил: 28 апреля 2018 в 09:03 в: 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 ответа

Есть решение
Sloan Thrasher ответил: 28 апреля 2018 в 09:10

Вы создаете столбец для заказа в столбцах выбора, а не в предложении 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
Aloe Vera ответил: 28 апреля 2018 в 09:24
Спасибо Слоан. Просто интересно, является ли MySQL достаточно умным, чтобы повторно использовать дорогостоящий поиск INSTR? Или он будет искать дважды, один раз для поиска и один раз для заказа?
Sloan Thrasher ответил: 28 апреля 2018 в 02:49
Я считаю, что он выполнит его только один раз, пока они точно совпадут.
Susang ответил: 28 апреля 2018 в 09:36

ИЛИ вы можете просто поместить выражение непосредственно в 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
Aloe Vera ответил: 28 апреля 2018 в 09:53
Спасибо. Действительно ценю это. Вы знаете, использует ли MySQL повторный поиск INSTR или где я могу найти ответ на этот вопрос?