繁体   English   中英

如何编写 MySQL 查询其中 A 包含(“a”或“b”)

[英]How to write MySQL query where A contains ( “a” or “b” )

我必须where A operand B使用这种格式。 A是场; 我希望 B 为“text 1”或“text 2”,因此如果 A 具有“text 1 texttext”或“texttext 2”之类的数据,则查询将有结果。

但是我该怎么写呢? MySQL 是否支持类似的东西

where A contains ('text 1' OR 'text 2')? `

两种选择:

  1. 使用LIKE关键字以及字符串中的百分号

    select * from table where field like '%a%' or field like '%b%'.

    (注意:如果您的搜索字符串包含百分号,则需要对其进行转义)

  2. 如果您正在寻找比您在示例中指定的更复杂的字符串组合,您可以使用正则表达式 (regex):

    See the MySQL manual for more on how to use them: http://dev.mysql.com/doc/refman/5.1/en/regexp.html

其中,使用LIKE是最常用的解决方案——它是标准的 SQL,并且是常用的。 正则表达式不太常用,但功能更强大。

请注意,无论您使用 go 的哪个选项,您都需要了解可能的性能影响。 像这样搜索子字符串意味着查询必须扫描整个表。 如果您有一个大表,这可能会导致查询速度非常慢,并且再多的索引也无济于事。

如果这对您来说是个问题,并且您需要一遍又一遍地搜索相同的东西,您可能更愿意做一些事情,比如在表中添加一个标志字段,指定字符串字段包含相关的子-字符串。 如果您在插入或更新记录时保持此标志字段是最新的,您可以在想要搜索时简单地查询该标志。 这可以被索引,并使您的查询更快。 是否值得为此付出努力取决于您,这取决于使用LIKE的性能有多差。

您可以像这样编写查询:

SELECT * FROM MyTable WHERE (A LIKE '%text1%' OR A LIKE '%text2%')

%是通配符,这意味着它搜索列 A 包含text1text2的所有行

我大部分时间都使用 LIKE 选项,它工作得很好。 我只想分享我使用 INSTR function 的最新经验之一。 不管是什么原因让我考虑这个选项,这里重要的是使用相似: instr(A, 'text 1') > 0 or instr(A, 'text 2') > 0 另一个选项可能是:( instr(A, '文本 1') + instr(A, '文本 2')) > 0

我会 go 与 LIKE '%text1%' OR LIKE '%text2%' 选项...如果不是希望这个其他选项有帮助

我用于搜索摩托车尺寸的用户:

例如:数据 =“轮胎循环尺寸 70 / 90 - 16”

我可以用“70 90 16”搜索

$searchTerms = preg_split("/[\s,-\/?!]+/", $itemName);

foreach ($searchTerms as $term) {
        $term = trim($term);
            if (!empty($term)) {
            $searchTermBits[] = "name LIKE '%$term%'";
            }
        }

$query = "SELECT * FROM item WHERE " .implode(' AND ', $searchTermBits);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM