我有一个选择查询,我正在尝试搜索多个模式的字符串
LIKE ('%this%' or '%that%' ) and something=else
返回零结果
然而
LIKE '%this%' and something=else
返回结果 和
LIKE '%that%' and something=else
返回结果
是否可以将所有结果都放入一个查询中?如果字符串匹配两者,它将如何处理?
答案 0 :(得分:76)
如果可以的话会很好,但是你不能在SQL中使用那种语法。
试试这个:
(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something = else
注意使用括号!你需要围绕OR
表达式。
如果没有括号,它将被解析为A OR (B AND C)
,这将无法提供您期望的结果。
答案 1 :(得分:21)
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
答案 2 :(得分:5)
尝试类似:
WHERE (column LIKE '%this%' OR column LIKE '%that%') AND something = else
答案 3 :(得分:3)
将LIKE
条款分成两个单独的语句,即:
(fieldname1 LIKE '%this%' or fieldname1 LIKE '%that%' ) and something=else
答案 4 :(得分:2)
你有什么东西不反对分裂吗?
...FROM <blah>
WHERE
(fieldA LIKE '%THIS%' OR fieldA LIKE '%THAT%')
AND something = else
答案 5 :(得分:1)
你试过了吗?
(column LIKE '%this%' and something=else) or (column LIKE '%that%' and something=else)
答案 6 :(得分:0)
我知道这有点老问题,但仍然有人试图找到有效的解决方案,所以你应该使用FULLTEXT index(它可以从MySQL 5.6.4获得)。
在表格中查询+ 35mil记录,其中三个like
在其中 ~2.5s ,但在这些字段上添加索引并在match ... against ...
内使用BOOLEAN MODE只花了 0.05s 。