嗨我有一个下拉菜单,它正在为搜索表单提供价值。搜索有两个标准。物业类别&属性子类别。选择两者时,搜索工作正常。物业类别有五个选项:空白,住宅,商业,工业,农业..我想构建查询,因此如果属性类别中的值为空,则应显示与住宅,商业,工业和农业相匹配的所有结果。目前留空是没有答案。
我尝试了两种方法,使用数组,然后构造mysql IN数组..但问题是如何搜索数组或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();
我正在尝试执行以下操作,但问题是如果选择了值,则它是一个变量,否则如果它是空白则它是一个数组..因此结构查询是个问题
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 :(得分: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();
现在的问题是,为什么我需要这么长时间来理解和做事......
答案 1 :(得分: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();