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

时间:2011-05-25 07:53:06

标签: mysql

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

但我怎么写这个? MySQL是否支持类似

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

4 个答案:

答案 0 :(得分:31)

两个选项:

  1. 使用LIKE关键字以及字符串

    中的百分号
    select * from table where field like '%a%' or field like '%b%'.
    

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

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

    有关如何使用它们的更多信息,请参阅MySQL手册:http://dev.mysql.com/doc/refman/5.1/en/regexp.html

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

    请注意,无论您选择哪种方式,都需要了解可能的性能影响。搜索这样的子字符串意味着查询必须扫描整个表。如果你有一个大表,这可能会导致一个非常慢的查询,并且没有任何索引可以帮助。

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

答案 1 :(得分:5)

您可以这样编写查询:

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

%是一个通配符,这意味着它会搜索列A包含 text1 text2

的所有行

答案 2 :(得分:0)

我大部分时间都使用了LIKE选项,它运行得很好。 我只想分享一下我使用INSTR功能的最新经验。无论让我考虑这个选项的原因,这里重要的是使用类似: instr(A,'text 1')> 0或instr(A,'text 2')> 0 另一个选择可能是: (instr(A,'text 1')+ instr(A,'text 2'))> 0

我选择LIKE'%text1%'或LIKE'%text2%'选项...如果不希望其他选项有帮助

答案 3 :(得分:0)

我正在搜索摩托车的大小:

例如: 数据=“轮胎尺寸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);