[英]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.