我有一個網站搜索表單,並且希望用戶有幾個搜索詞輸入到執行數據庫搜索,條款如下:PHP MySQL的搜索與多個標準
- 關鍵詞
- 樓盤(出售,出租...)
- 物業類型(公寓,排屋...)
- 國家
- 最低報價
- 最高價格
這裏是腳本來執行以上期限的輸入
public function get_property_list_by_search($start, $per_page, $keyword, $prop_for, $min, $state, $ptype, $max, $mysqli)
{
if(empty($start) && empty($per_page))
{
return 0;
}
$start = preg_replace('/[^0-9]/', '', $mysqli->real_escape_string($start));
$per_page = preg_replace('/[^0-9]/', '', $mysqli->real_escape_string($per_page));
$keyword = $mysqli->real_escape_string(stripslashes($keyword));
$prop_for = $mysqli->real_escape_string(stripslashes($prop_for));
$state = $mysqli->real_escape_string(stripslashes($state));
$ptype = $mysqli->real_escape_string(stripslashes($ptype));
$min_price = self::num_clean($mysqli->real_escape_string($min));
$max_price = self::num_clean($mysqli->real_escape_string($max));
$t1 = '';
$t2 = '';
$t3 = '';
$t4 = '';
$t5 = '';
if(isset($keyword) && !empty($keyword)){
$t1 = " AND `proj_title` LIKE '%".$keyword."%' OR `proj_addr` LIKE '%".$keyword."%' OR `proj_area` LIKE '%".$keyword."%'";
}
if(isset($prop_for) && !empty($prop_for)){
$t2 = " AND `proj_for`='".$prop_for."'";
}
if(isset($state) && !empty($state)){
$t3 = " AND `state`='".$state."'";
}
if(isset($ptype) && !empty($ptype)){
$t4 = " AND `proj_cat`='".$ptype."'";
}
//min & max
if((isset($min_price) && !empty($min_price)) && (isset($max_price) && !empty($max_price))){
$t5 = " AND `price` BETWEEN '".$min_price."' AND '".$max_price."'";
}
//min only
if(!empty($min_price) && empty($max_price)){
$t5 = " AND `price` >= '".$min_price."'";
}
//max only
if(empty($min_price) && !empty($max_price)){
$t5 = " AND `price` <= '".$max_price."'";
}
$sql = $mysqli->query("SELECT * FROM `project` WHERE `status`='1' ".
$t1." ".$t2." ".$t3." ".$t4." ".$t5." ".
"ORDER BY `posted_date` DESC LIMIT ".$start.", ".$per_page);
if($sql->num_rows > 0){
return $sql;
}else{
return false;
}
}
搜索查詢輸出將是這樣的:
SELECT * FROM `project`
WHERE `proj_title` LIKE '%keywords%'
OR `proj_addr` LIKE '%keywords%'
OR `proj_area` LIKE '%keywords%'
AND `proj_for`='Sale' AND `state`='Somewhere' AND `proj_cat`='8' AND `price` BETWEEN '250000' AND '600000'
(數據類型price
是DECIMAL(10,2)
,它儲值像250000.00
)
但是,返回的結果不像預期的那樣(不準確),它也會以超過60萬的價格和超出「8」的項目類別出現,這是最終用戶在網站上搜索不到的。
有沒有什麼辦法來改進查詢執行更具體的?
感謝的人。我可以向你學習嗎?我怎樣才能輸出一個查詢來檢查課堂的目的?我仍然不知道導致失敗的查詢出了什麼問題。 – conmen 2014-10-09 08:22:50
哦,確定@conmen,:)你可以加我FB(fb.com/gahse)。我只是要求你添加 echo $ q; 在這行之前 $ sql = $ mysqli-> query($ q); 這將返回查詢字符串,然後您可以複製此字符串並將其粘貼到任何MySql客戶端,如phpmyadmin或sqlyog。它將幫助您刪除所有語法錯誤。 – gahse 2014-10-09 08:45:18