【问题标题】:Returning All Results when Field is blank字段为空时返回所有结果
【发布时间】:2017-02-15 06:00:16
【问题描述】:

您好,我有一个下拉菜单,将价值输入到搜索表单中。有两个搜索条件。属性类别和属性子类别。当两者都被选中时,搜索工作得很好。属性类别有五个选项:空白、住宅、商业、工业、农业。我想构造查询,因此如果属性类别中的值为空白,它应该显示与住宅、商业、工业和农业匹配的所有结果。目前将其留空不会给出任何答案。

我尝试了两种方法,使用数组,然后构造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();

【问题讨论】:

  • 所以,基本上,当两个下拉菜单都没有被选中时,你不想要WHERE 子句,对吧?
  • 是的,我正在考虑在查询中放置一个 if 语句,以便仅在其中有值时才对 property_category 进行搜索
  • 听起来是个好主意..
  • 您使用IN 的解决方案可以工作,但会使其难以维护。想想如果你曾经在界面中添加了一个新类别,你必须记住将它添加到你的$myarray,否则这些结果将永远不会返回。

标签: php mysql search


【解决方案1】:

这似乎有效

$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(); 

现在的问题是,为什么我要花这么长时间去理解和做事……

【讨论】:

    【解决方案2】:

    试试这个:

    $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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-14
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 2012-12-20
      相关资源
      最近更新 更多