Подтвердить что ты не робот

'LIKE ('% this% 'ИЛИ'% that% ') и something = else' не работает

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

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

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

Однако

LIKE '%this%' and something=else

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

LIKE '%that%' and something=else

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

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

4b9b3361

Ответ 1

Было бы неплохо, если бы вы могли, но вы не можете использовать этот синтаксис в SQL.
Попробуйте следующее:

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

...FROM <blah> 
   WHERE 
     (fieldA LIKE '%THIS%' OR fieldA LIKE '%THAT%') 
     AND something = else

Ответ 6

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

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

Ответ 7

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

Запрос на таблицу с записями + 35mil с помощью triple like, где блок принял ~ 2.5s, но после добавления индекса в эти поля и использования BOOLEAN MODE внутри match ... against ... потребовалось всего 0,05 с.