MySQL SELECT LIKE或REGEXP在一个logging中匹配多个单词
字段table 。  name包含“Stylus Photo 2100”和以下查询 
 SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus 2100%' 
我没有得到任何结果。 当然,如果我search,我会
 SELECT `name` FROM `table` WHERE `name` LIKE '%Photo 2100%' 
如何通过search“Stylus 2100”来selectlogging?
谢谢
那么如果你知道你的话的顺序..你可以使用:
 SELECT `name` FROM `table` WHERE `name` REGEXP 'Stylus.+2100' 
你也可以使用:
 SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%' AND `name` LIKE '%2100%' 
我认为最好的解决scheme是使用正则expression式。 这是最干净的,可能是最有效的。 所有常用的数据库引擎都支持正则expression式。
 在MySql中有RLIKE运算符,所以你的查询将是这样的:   SELECT * FROM buckets WHERE bucketname RLIKE 'Stylus|2100' 
 在正则expression式中我不是很强,所以我希望expression式可以。 
  编辑 
  RegExp应该是: 
 SELECT * FROM buckets WHERE bucketname RLIKE '(?=.*Stylus)(?=.*2100)' 
 更多关于MySql正则expression式的支持: 
  http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp 
 你可以用% 
 SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%2100%' 
看看http://www.techonthenet.com/sql/like.php
与“%Stylus 2100%”一样,您要求一个包含“Stylus 2100”的string,而“Stylus Photo 2100”不包含该string,里面有“照片”;
正确的解决scheme是全文search(如果您可以使用它) https://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html
这几乎做你想要的:
 SELECT * FROM buckets WHERE bucketname RLIKE '(Stylus|2100)+.*(Stylus|2100)+'; SELECT * FROM buckets WHERE bucketname RLIKE '(Stylus|2100|photo)+.*(Stylus|2100|photo)+.*(Stylus|2100|photo)+.*'; 
但是这也会匹配不太好的“210021002100”。