Регулярное выражение в MySQL - найти строку, которая содержит все ключевые слова (оператор AND)
Я застрял на 3 часа с простой вещью, но я искал интернет и не нашел ответа. У меня есть 1, 2, 3, 4 или более ключевых слов и строка для поиска ключевых слов в нем. Я ищу выражение регулярного выражения, которое сопоставляет ВСЕ ключевые слова. Так, например:
string = "эта машина красная и имеет большие колеса"
ключевые слова: автомобильные колеса
возвращение: правда
ключевые слова: колеса автомобиля
возвращение: правда
ключевые слова: машина красная
возвращение: правда
ключевые слова: это большое
возвращение: правда
ключевые слова: автомобиль красный маленький
return: false (в строке нет "маленького" слова)
Я использую такой запрос MySQL:
SELECT name, desc FROM table WHERE CONCAT(name, desc) REGEXP ($keyword1)($keyword2)
Но он возвращает пустую строку. Какой должен быть правильный синтаксис регулярных выражений?
1 ответ
Самое простое решение - переместить AND
из регулярного выражения в SQL:
SELECT name, desc
FROM table
WHERE CONCAT(name, desc) REGEXP ($keyword1)
AND CONCAT(name, desc) REGEXP ($keyword2)
В противном случае ваше регулярное выражение должно включать все N!
возможные заказы в длинной цепочке OR
утверждения, и эта длина растет очень, очень быстро (с 5 ключевыми словами, вам нужно создать 120 различных заказов!)