2012-07-26 26 views
0

值基本上,该表的设置是这样的:MySQL的像逗号

+-----------+----------+-------------+ 
| land | city | perimeter | 
+-----------+----------+-------------+ 
| America | Kansas |  1  | 
| Britain | Berlin |  4  | 
| Japan | Tokyo |  5  | 
+-----------+----------+-------------+ 

我当前的查询:

$query = "SELECT land, city, perimeter FROM agents WHERE land LIKE ? OR city LIKE ? OR perimeter LIKE ?"; 
$params = array("%China%","%Kansas%","%6%"); 

此查询的工作,这个它会返回America,Kansas,1。但是,如果我的params将等于:

$params = array("%China%","%Beijing,London,Kansas,Bali%","%6%"); 

这不会返回任何内容。如何在由逗号分隔的值中使用LIKE以便至少匹配那些以逗号分隔的值存在的项目。

+0

请参阅:http://stackoverflow.com/questions/327274/mysql-prepared-statements-with-a-variable-size-variable-list – ceving 2012-07-26 12:23:35

回答

1

而不是LIKE使用REGEXP(更多信息在这里:http://dev.mysql.com/doc/refman/5.0/en/regexp.html)。

$query = "SELECT land, city, perimeter FROM agents 
    WHERE land REGEXP ? OR city REGEXP ? OR perimeter REGEXP ?"; 
$params = array("^China$","^Beijing|London|Kansas|Bali$","^6$"); 
+0

如果我有其他方法,数据库有逗号那么params数组上的值只是一个单词,这种方法会适合吗? – 2012-07-30 07:55:27

+0

是的,除非您查找的单词是另一个单词的子字符串(即您正在查找“York”并且数据库中存在“New York”)。解决这个问题 - 在搜索中包含分隔符。 – 2012-07-30 08:39:15

+0

非常需要你的帮助amigo,如果我的数据库'city'是'北京,伦敦,堪萨斯,巴厘岛',那么在我的参数''^ Beijing | Jakarta $'''上,这是行不通的。我需要调整什么?谢谢。 – 2012-07-30 11:48:21

0

您不能传递逗号分隔值,并期望它们可以通过参数函数正确分组。

您的查询,因为它代表的回报:

SELECT land, city, perimeter FROM agents WHERE land LIKE 'China' OR city LIKE 'Beijing,London,Kansas,Bali' OR perimeter LIKE '6'

这显然不是你想要的。

你想要做的事情需要检查是否有任何参数是通过if(count(explode(',', $myArray))>1)之类的可分解数组来查看传递给查询的任何变量是否是包含多个字段的数组。如果是,则要运行一个不同的查询字符串,以正确检查多个or语句。