【问题标题】:WHERE (option1 || option2 || ...) LIKE '%key%'WHERE (option1 || option2 || ...) LIKE '%key%'
【发布时间】:2012-09-18 05:06:14
【问题描述】:

我想使用 LIKE 进行查询。

我不知道什么是正确的语法

WHERE ( (option1 || option2 || option3) LIKE '%key%' ) AND field = 'option4')

谁能帮我解决这个问题?

我需要查询 WHERE option1 or option2 or option3 are LIKE with key

在 LIKE 条件之后,我需要另一个 WHERE which field = option4

注意:option1,2,3... 是字段

【问题讨论】:

  • (option1 like '%key%' or option2 like '%key%' or option3 like '%key%') AND field ='option4' this will do the thing

标签: mysql sql syntax


【解决方案1】:

你需要这样的东西:

where (option1 like '%key%' or option2 like '%key%' or option3 like '%key%')
  and field = 'option4'

【讨论】:

  • 是的,我这样做了,而且效果很好,但是有没有办法让代码不那么长?
  • @IvorySantos 是的 - 选择更少... :)
  • @IvorySantos:我什么都想不出来。你不应该太担心你的 SQL 有多长,尽可能清楚地表达你的意图,每个人(你,六个月内阅读你的代码的人,以及数据库)都应该很高兴。
【解决方案2】:

看看Manual (Pattern matching)Like Operator 看看this answer,它一般来说 Like 运算符是如何工作的。

【讨论】:

    【解决方案3】:
    WHERE CONCAT_WS(' ', option1, option2, option3) LIKE '%key%'
      AND field = 'option4'
    

    ' ' 可以是您喜欢的任何分隔符,并且可能应该避免使用key 可能导致错误读数的任何内容。

    INDEX(field)
    

    可能是最好的索引。 option1 等上的索引是无用的。

    我的CONCAT 可能比OR 的建议快一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2015-08-01
      • 2017-05-10
      • 1970-01-01
      • 2012-06-09
      • 2017-01-17
      • 1970-01-01
      相关资源
      最近更新 更多