2013-07-12 44 views
0

對不起,如果該標題含糊不清,我什至不能想到要調用什麼我想要做的...將更新給定的評論。匹配所有選項中的所有參數,然後查詢數據庫

我有兩組複選框第一個(稱爲代碼)集有5個選項,然後第二個集有20個選項(稱爲家庭)。目前,爲了構建一個WHERE語句爲我查詢我這樣做:

if(isset($_POST['code']) && !empty($_POST['code'])){ 
foreach($_POST['code'] as $key=>$value){ 
    if($value==1) $criteria[] = "code='".mysql_escape_string($key)."'"; 
} 
$criteria = implode(' OR ', $criteria); 
} 

if(isset($_POST['family']) && !empty($_POST['family'])){ 
foreach($_POST['family'] as $key=>$value){ 
    if($value==1) $family_criteria[] = "family='".mysql_escape_string($key)."'"; 

} 
$family_criteria = implode(' OR ', $family_criteria); 

} 

,這裏是查詢

WHERE $criteria AND $family_criteria ORDER BY .... 

這導致「的一部分,其代碼= 1或代碼= 2和家庭=瓊斯ORDER BY ......」

而我需要做的是‘BY ...’

+2

將每個OR標準塊放在括號中。 '(code = 1 OR code = 2)AND(family = jones)' – andrewsi

回答

1

如何構建其代碼= 1個家庭=瓊斯或代碼= 2和家庭=瓊斯ORDER如下:

... WHERE (code=1 or code=2) and family='jones' ... 

這將只需要一個小的調整時添加圍繞code參數生成的括號,並在語義上等同於你說你想要的。

if(isset($_POST['code']) && !empty($_POST['code'])){ 
    foreach($_POST['code'] as $key=>$value){ 
     if($value==1) $criteria[] = "code='".mysql_escape_string($key)."'"; 
    } 
    $criteria = "(" . implode(' OR ', $criteria) . ")"; 
} 
+0

哇,我在想辦法......這是一個很簡單的解決方法,非常感謝! –

+1

我建議包裝家庭的一部分,否則你最終會得到'(code = 1或code = 2)和family = jones或family = smith',這將無法正確評估。 – andrewsi

+0

完美,將盡!謝謝 –

相關問題