SQL функция, поиск и подсчет ключей в строчке
В создании функций mysql хорошо не разбираюсь. Прошу помощи в написании следующей функции
Есть 2 строчки
- 'Текст name f Текст'
- 'Овощное рагу'
Предположим это две разные строчки из таблицы.
Необходимо выполнить поиск в них по 3 ключам это 'овощ|текст|f' и вывести в поле то количество ключей которое было найдено. В первой строчке найдено 2 ключа - Текст и f, на выходе получить 2, во второй строчке на выходе получить 1
Главное чтобы не учитывался регистр и с возможностью поиска по нескольким полям.
Не должно быть так, если ищем вхождение по ключу авто, а в строке упоминается 5 раз слово 'авто' то количество вхождений должно быть 1. То есть нашли один ключ, прибавили единицу, нашли второй, прибавили единицу и в итоге получится 2.
Функция необходима для вывода результата для модуля поиска на сайте. По количеству вхождений будет сортировка.
Вопрос в том, как лучше еще сделать так, чтобы допустим.
Есть 2 ключа 'овощ|овощное' и 2 строчки 'Овощное рагу' и 'Вырос овощ', в обеих строчках получим на выходе 1 и сортировка тут не будет играть роли. Как лучше?
То что мы получили по 1 в обеих случаях это уже хорошо, может стоит учитывать длину вхождения, прибавлять длину вхождения, а не по единице? Или выполнить как то иначе? Спасибо.
Ответы (1 шт):
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 |