[英]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')? `
两种选择:
使用LIKE
关键字以及字符串中的百分号
select * from table where field like '%a%' or field like '%b%'.
(注意:如果您的搜索字符串包含百分号,则需要对其进行转义)
如果您正在寻找比您在示例中指定的更复杂的字符串组合,您可以使用正则表达式 (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 包含text1或text2的所有行
我大部分时间都使用 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.