'LIKE ('% this% 'ИЛИ'% that% ') и something = else' не работает
У меня есть запрос select, где я пытаюсь искать строки для нескольких шаблонов
LIKE ('%this%' or '%that%' ) and something=else
Возвращает нулевые результаты
Однако
LIKE '%this%' and something=else
возвращает результаты
и
LIKE '%that%' and something=else
возвращает результат
Можно ли получить все мои результаты в один запрос? Если строка соответствует обоим, как это будет обрабатываться?
Ответы
Ответ 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 с.