MySQL SELECT LIKE或REGEXP在一个logging中匹配多个单词

字段tablename包含“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”。