Регулярное выражение в 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 различных заказов!)

Другие вопросы по тегам