2017-02-15 39 views
0

嗨,我有一个下拉菜单,它将值填入搜索表单。有两个搜索标准。物业类别&财产子类别。当两者都选中时,搜索效果很好。物业类别有五个选项:空白,住宅,商业,工业,农业..我想构造查询,所以如果属性类别中的值为空白,它应显示与住宅,商业,工业和农业相匹配的所有结果。目前将其留空不会给出答案。字段为空时返回所有结果

我已经尝试了两种方式,使用数组,然后构建在MySQL阵列..但问题是如何在一个数组或MySQL中的变量搜索...

以下是HTML表单

<select class="searchpropertyinputs" name="property_category" id="property_category" onchange="subcategory('property_category', 'property_subcategory');"> 
    <option value="">Property Type</option> 
    <option value="Residential">Residential</option> 
    <option value="Commercial">Commercial</option> 
    <option value="Industrial">Industrial</option> 
    <option value="Agricultural">Agricultural</option> 
</select> 
</br> 

<select class="searchpropertyinputs" name="property_subcategory" id="property_subcategory"> 
    <option value="">Property Subtype</option> 
</select> 
</br> 

PHP

$property_category = ($_GET['property_category']); 

$select = $con->prepare("SELECT * FROM tbl_property WHERE (property_category='$property_category' AND property_subcategory='$property_subcategory') LIMIT {$start}, {$perPage}"); 
$select->setFetchMode(PDO::FETCH_ASSOC); 
$select->execute(); 

我尝试做以下,但问题是,如果选择值它是一个变量,否则,如果它是空白的,然后它是一个数组..他NCE结构查询是一个问题

if ($property_category == ""){ 
$myarray[1] = "'Residential'"; 
$myarray[2] = "'Commercial'"; 
$myarray[3] = "'Industrial'"; 
$myarray[4] = "'Agricultural'"; 
$property_category = implode(", ", $myarray); 
} 

$select = $con->prepare("SELECT * FROM tbl_property WHERE property_category IN ($property_category) LIMIT {$start}, {$perPage}"); 
$select->setFetchMode(PDO::FETCH_ASSOC); 
$select->execute(); 
$count = $select->rowCount(); 

期望的结果是做基于用户输入的搜索,但如果用户不选择任何东西(空值),然后给所有存在于列中的结果。

这是行不通的,这是给没有结果

$select = $con->prepare(
"SELECT * FROM tbl_property 
WHERE property_category LIKE 
    CASE WHEN '$property_category' = '' 
    THEN '%' 
    ELSE '$property_category' 
    END CASE 
    LIMIT {$start}, {$perPage}"); 
$select->setFetchMode(PDO::FETCH_ASSOC); 
$select->execute(); 
$count = $select->rowCount(); 
+0

所以,从本质上讲,你不想让'WHERE'条款时,不会选择这两个下拉菜单,对不对? – BizzyBob

+0

是的,我正在考虑在查询内部放置一条if语句,以便在property_category上只有当它有一个值时才进行搜索 – DragonFire

+0

听起来像是一个好主意.. – BizzyBob

回答

0

这似乎是工作

$search = array(
    "select" => "SELECT * FROM tbl_property", 
    "where" => "WHERE property_category='$property_category'", 
); 

if (empty($property_category)) { 
    unset($search["where"]); 
} 

$search = implode(' ', $search); 

$select = $con->prepare($search); 
$select->setFetchMode(PDO::FETCH_ASSOC); 
$select->execute(); 
$count = $select->rowCount(); 

这似乎也正在

$search = 
    "SELECT * FROM tbl_property " . 
    (empty($property_category) ? "" : "WHERE property_category='$property_category' "); 

$select = $con->prepare($search); 
$select->setFetchMode(PDO::FETCH_ASSOC); 
$select->execute(); 
$count = $select->rowCount(); 

现在的问题是那为什么我花很长时间去理解和做事...

0

试试这个:

$where = array(); 
$select_query = "SELECT * FROM tbl_property"; 
if (!empty($property_category)) { 
    $where[] = "property_category='$property_category'"; 
} 
$search_query = $select_query; 
if (!empty($where)) { 
    $search_query = $select_query . " Where " . implode(" ", $where); 
} 

$result = $con->prepare($search_query); 
$result->setFetchMode(PDO::FETCH_ASSOC); 
$result->execute(); 
$count = $select->rowCount();