Если вы хотите добиться успеха, когда (и только когда) 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».