2011-11-16 131 views
0

搜索:“化学家”多个LIKE,或MySQL查询匹配

问题:查询将匹配像“onechemist”而非“化学家”的字符串。

SELECT id,name FROM `records` 
WHERE name LIKE '%". mysql_real_escape_string($q) ."%' 

此备用试都不行:

SELECT id,name FROM `records` 
WHERE name LIKE '%". mysql_real_escape_string($q) ."%' 
OR name LIKE '". mysql_real_escape_string($q) ."%' 
OR name LIKE '%". mysql_real_escape_string($q) ."' 

我怎么能编译上面成一个单一的查询,将匹配它具有字符串的任何字段或优化查询到一个更好的表达?

+1

你的第一个查询*开始应*匹配''chemist''为好。根据[手册](http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html),'%'是一个通配符,可以匹配任意数量的字符,甚至为零字符” – NullUserException

回答

1

如果$q持有“化学家”,它将匹配name也是“化学家”。在这种情况下,您的第一个查询应该可以工作尝试双重检查你的值。

$sql = "SELECT `id`, `name` FROM `records` 
WHERE `name` LIKE '%".mysql_real_escape_string($q)."%'"; 

PS - 您的第二个查询将获得与第一个相同的结果。

0

您可以对此使用正则表达式。例如,

SELECT id,name FROM `records` where name REGEXP '^onechemist' 

它将匹配名称与onechemist