'LIKE ('% this% 'ИЛИ'% that% ') и что-то = другое' не работает - PullRequest
37 голосов
/ 30 июня 2011

У меня есть запрос на выборку, где я пытаюсь найти строки для нескольких шаблонов

LIKE ('%this%' or '%that%' ) and something=else

Возвращает ноль результатов

Однако

LIKE '%this%' and something=else

возвращает результаты и

LIKE '%that%' and something=else

возвращает результат

Возможно ли получить все мои результаты в одном запросе?Если строка соответствует обоим, как это будет обрабатываться?

Ответы [ 7 ]

78 голосов
/ 30 июня 2011

Было бы неплохо, если бы вы могли, но вы не можете использовать этот синтаксис в SQL.

Попробуйте это:

(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something = else

Обратите внимание на использование скобок! Они нужны вам вокруг выражения OR.
Без скобок он будет проанализирован как A OR (B AND C), что не даст ожидаемых результатов.

21 голосов
/ 23 января 2014
Instead of using `LIKE` use `REGEXP`.

For example:

    REGEXP 'THIS|THAT'

For example:

    REGEXP 'THIS|THAT'
mysql> SELECT 'pi' REGEXP 'pi|apa';                     -> 1
mysql> SELECT 'axe' REGEXP 'pi|apa';                    -> 0
mysql> SELECT 'apa' REGEXP 'pi|apa';                    -> 1
mysql> SELECT 'apa' REGEXP '^(pi|apa)$';                -> 1
mysql> SELECT 'pi' REGEXP '^(pi|apa)$';                 -> 1
mysql> SELECT 'pix' REGEXP '^(pi|apa)$';                -> 0

Refer:
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
5 голосов
/ 30 июня 2011

Попробуйте что-то вроде:

WHERE (column LIKE '%this%' OR column LIKE '%that%') AND something = else

3 голосов
/ 30 июня 2011

Разбейте предложения LIKE на 2 отдельных оператора, т. Е .:

(fieldname1 LIKE '%this%' or fieldname1 LIKE '%that%' ) and something=else
2 голосов
/ 30 июня 2011

Есть ли у вас что-то против разделения?

...FROM <blah> 
   WHERE 
     (fieldA LIKE '%THIS%' OR fieldA LIKE '%THAT%') 
     AND something = else
1 голос
/ 30 июня 2011

Вы пробовали:

(column LIKE '%this%' and something=else) or (column LIKE '%that%' and something=else)
0 голосов
/ 10 января 2017

Я знаю, что это немного старый вопрос, но все же люди пытаются найти эффективное решение, поэтому вместо этого вы должны использовать FULLTEXT index (доступно из MySQL 5.6.4).

Запрос к таблице с + 35mil записями в три раза like, где блок занял ~ 2,5 с , но после добавления индекса для этих полей и использования BOOLEAN MODE внутри match ... against ... it заняло всего 0,05 с .

...