Соответствует регулярному выражению, содержащему несколько слов - PullRequest
0 голосов
/ 27 января 2019

Какой метод я должен использовать в MySQL для сопоставления двух или более строк со столбцом?

У меня есть столбец string, который содержит ключевые слова, такие как apple, orange и lemon,Что мне нужно, чтобы искать строки, которые содержат apple и orange, используя регулярное выражение, команда имеет что-то вроде этого:

where string regexp '(apple|orange)' and fruit = 1

Команда выше нарушит правило, если строка с фруктами1 имеет только apple, его не следует включать в результат, потому что у фрукта 1 не было другой строки, содержащей orange.

1 Ответ

0 голосов
/ 28 января 2019

Если вы хотите добиться успеха, когда (и только когда) string содержит как «яблоко», так и «апельсин», тогда лучше всего иметь FULLTEXT(string)

WHERE MATCH(string) AGAINST("+apple +orange" IN BOOLEAN MODE)

Это также будет соответствовать«Оранжевые разноцветные яблоки» и несколько других вариантов.Полный текст имеет некоторые оговорки, такие как работа только со «словами» и не работа с короткими словами.Но если ограничения в порядке, это будет намного быстрее, чем LIKE или REGEXP.

Если Fulltext не будет работать, то что-то вроде этого лучше:

WHERE string LIKE '%apple%'
  AND string LIKE '%orange%'

Илиэто можно сделать с помощью REGEXP:

WHERE string REGEXP '(apple.*orange)|(orange.*apple)'

Если вам нужно соблюдать границы слов и / или разрешать множественное число, добавьте это в свою спецификацию;эти предлагаемые решения могут нуждаться в изменении.Например, изменение .* на .+ приведет к отклонению «appleorange» при одновременном разрешении «apple / orange».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...