У меня есть таблица, скажем, ITEM, в MySQL, которая хранит данные следующим образом:
ID FEATURES
--------------------
1 AB,CD,EF,XY
2 PQ,AC,A3,B3
3 AB,CDE
4 AB1,BC3
--------------------
В качестве ввода я получу строку CSV, что-то вроде "AB, PQ". Я хочу получить записи, которые содержат AB или PQ. Я понял, что мы должны написать функцию MySQL для достижения этой цели. Итак, если у нас есть эта магическая функция MATCH_ANY, определенная в MySQL, которая делает это, я бы просто выполнил SQL следующим образом:
select * from ITEM where MATCH_ANY(FEAURES, "AB,PQ") = 0
Приведенный выше запрос вернет записи 1, 2 и 3.
Но при реализации этой функции я сталкиваюсь с множеством проблем, поскольку понял, что MySQL не поддерживает массивы и нет простого способа разбить строки на основе разделителя.
Модернизация таблицы - это последний вариант для меня, поскольку она связана с множеством проблем.
Возможно, я также захочу выполнить запросы, содержащие несколько функций MATCH_ANY, таких как:
select * from ITEM where MATCH_ANY(FEATURES, "AB,PQ") = 0 and MATCH_ANY(FEATURES, "CDE")
В приведенном выше случае мы получили бы пересечение записей (1, 2, 3) и (3), которое было бы всего 3.
Любая помощь очень ценится.
Спасибо