2012-07-26 30 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語句。