簡體   English   中英

php-Mysql multipe搜索列

[英]php-Mysql multipe search columns

我很累找不到關於這個問題的解決方案:(

我正在使用多個關鍵字和其他子句進行多重搜索

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).....";

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

有幾個問題。

首先,您要像處理數組一樣遍歷$query 我認為您打算迭代$keywords嗎?

您在多個位置引用$qur (可能應該是$query

如果按類別搜索,那么您將重置查詢而不是附加到查詢。 $query=...而不是$query.=...

除了最后一件事之外,還可以使用錯誤報告輕松發現這些錯誤,這在開發過程中是個好主意:

error_reporting(E_ALL);

您應該將OR的每個部分都用括號括起來,以正確分隔它們。 這需要檢查是否為空,這樣您就不會以AND () AND ...結尾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();

干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM