2014-10-03 40 views
0

我累找到有關此主題:(PHP MySQL的multipe搜索欄

我通過使用多個關鍵字和其它項工作在多個搜索解決方案

我在BDD表中存儲MYISAM和整理UTF8

ad { id,type,title,description,categorie,sub_cat,departement.... } 


$query="SELECT * FROM AD WHERE"; 

    $keywords=explode(",",$key); 

foreach ($query as $value) { 

     $value=trim($value); 
     $query.=" (title REGEXP '".$value."' OR description REGEXP '".$value."') OR"; 
     } 
$query=rtrim($qur,"OR"); 
$query.="AND"; 
if(!empty($categorie))$query=" (categorie LIKE '".$categorie."') AND"; 
foreach ($sub_cat as $value) { 
     $query.=" (sub_cat REGEXP '".$value."') OR"; 
    } 
    $query=rtrim($qur,"OR"); 
    $query.="AND"; 

    foreach ($departementS as $value) { 
     $valuedepartement=(int)$valuedepartement; 
     $query.=" (departementAnn=".$valuedepartement.") OR"; 

    } 
    $query=rtrim($qur,"OR"); 
    $query.="AND"; 

    query results: 
    $query="SELECT * FROM ad WHERE (title REGEXP 'key1') OR (description REGEXP 'key1')OR (title REGEXP 'key2') OR (description REGEXP 'key2') AND (categorie LIKE 'exmple1') AND (sub_cat=12 OR sub_cat=17)....."; 

我沒有任何錯誤,但查詢將返回錯誤的結果

+0

問題在哪裏? – 2014-10-03 07:46:24

+0

@Azrael沒有那只是查詢字符串的第一部分的初始化,隨着邏輯的繼續,它將被追加,所以最終它將是一個完整的查詢,如果邏輯順利 – Ghost 2014-10-03 07:49:18

+0

@Ghost我看到xD對不起 – Azrael 2014-10-03 07:52:41

回答

0

有幾個問題。

首先,你要經過$query就好像它是一個數組。我想你打算迭代$keywords

你引用在多個地點$qur(應該是$query大概)

如果你重新查詢,而不是追加到它的類別搜索。 ($query=...而不是$query.=...

之外還有最後一件事,這些可以通過使用錯誤報告這是發展過程中一個不錯的主意很容易地發現其他:

error_reporting(E_ALL); 

你應該換手術室的每個部分在圓括號妥善分開它們。這需要檢查空的,所以你不會結束AND() AND ...

你在最後加上一個額外的AND沒有別的。這應該改爲rtrim「ANDWHER」,所以最後的AND被刪除,如果沒有標準,WHERE也被刪除。

$valuedepartement=(int)$valuedepartement應該是$valuedepartement=(int)$value;。當這個被調用時,$valuedepartement尚未定義。

所以最終的代碼如下:

$query="SELECT * FROM AD WHERE"; 

$keywords=explode(",",$key); 

if (!empty($keywords)) { 
     $query .= ' ('; 
     foreach ($keywords as $value) { 

       $value=trim($value); 
       $query.=" (title REGEXP '".$value."' OR description REGEXP '".$value."') OR"; 
     } 
     $query=rtrim($query,"OR") . ') AND '; 
} 
if(!empty($categorie))$query.=" (categorie LIKE '".$categorie."') AND "; 
if (!empty($sub_cat)) { 
     $query .= '('; 
     foreach ($sub_cat as $value) { 
       $query.=" (sub_cat REGEXP '".$value."') OR"; 
     } 
     $query=rtrim($query,"OR") . ') AND '; 
} 
if (!empty($departementS)) { 
     $query .= '('; 
     foreach ($departementS as $value) { 
       $valuedepartement=(int)$value; 
       $query.=" (departementAnn=".$valuedepartement.") OR"; 

     } 
     $query=rtrim($query,"OR") . ')'; 
} 
$query = rtrim($query, 'ANDWHER '); 
echo $query; 

這生成我相信查詢你在找什麼:

SELECT * FROM AD WHERE ((title REGEXP 'key1' OR description REGEXP 'key1') OR (title REGEXP 'key2' OR description REGEXP 'key2')) AND (categorie LIKE 'exmple1') AND ((sub_cat REGEXP '12') OR (sub_cat REGEXP '17')) 

我用下列輸入數據:

$key = 'key1,key2'; 
$categorie = 'exmple1'; 
$sub_cat=array(12, 17); 
$departementS = array(); 

乾杯