SQL функция, поиск и подсчет ключей в строчке

В создании функций mysql хорошо не разбираюсь. Прошу помощи в написании следующей функции

Есть 2 строчки

  1. 'Текст name f Текст'
  2. 'Овощное рагу'

Предположим это две разные строчки из таблицы.

Необходимо выполнить поиск в них по 3 ключам это 'овощ|текст|f' и вывести в поле то количество ключей которое было найдено. В первой строчке найдено 2 ключа - Текст и f, на выходе получить 2, во второй строчке на выходе получить 1

Главное чтобы не учитывался регистр и с возможностью поиска по нескольким полям.

Не должно быть так, если ищем вхождение по ключу авто, а в строке упоминается 5 раз слово 'авто' то количество вхождений должно быть 1. То есть нашли один ключ, прибавили единицу, нашли второй, прибавили единицу и в итоге получится 2.

Функция необходима для вывода результата для модуля поиска на сайте. По количеству вхождений будет сортировка.

Вопрос в том, как лучше еще сделать так, чтобы допустим.

Есть 2 ключа 'овощ|овощное' и 2 строчки 'Овощное рагу' и 'Вырос овощ', в обеих строчках получим на выходе 1 и сортировка тут не будет играть роли. Как лучше?

То что мы получили по 1 в обеих случаях это уже хорошо, может стоит учитывать длину вхождения, прибавлять длину вхождения, а не по единице? Или выполнить как то иначе? Спасибо.


Ответы (1 шт):

Автор решения: Akina
WITH
source AS (
    SELECT 'Текст name f Текст' data
    UNION ALL
    SELECT 'Овощное рагу'
    UNION ALL
    SELECT 'Предложение без вхождения подстрок'
),
pattern AS (
    SELECT 'овощ' pattern
    UNION ALL
    SELECT 'текст'
    UNION ALL
    SELECT 'f'
)
SELECT source.data, COUNT(pattern.pattern)
FROM source
LEFT JOIN pattern ON LOCATE(pattern.pattern, source.data COLLATE utf8mb4_0900_ai_ci)
GROUP BY 1;
data COUNT(pattern.pattern)
Текст name f Текст 2
Овощное рагу 1
Предложение без вхождения подстрок 0

fiddle

→ Ссылка