2017-02-15 6 views
0

こんにちは、私は検索フォームに値を与えているドロップダウンを持っています。検索の基準は2つあります。プロパティカテゴリ&プロパティサブカテゴリ。両方が選択されていると、検索はうまく機能しています。プロパティカテゴリには空白、住宅、商業、工業、農業の5つのオプションがあります。プロパティのカテゴリで値が空白の場合は、住宅、商業、工業および農業に一致するすべての結果を表示するようにクエリを構造化します。現在空白のままにしておけば回答は得られません。フィールドが空白の場合のすべての結果を返す

私は..アレイを使用して、その後、配列での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(); 

は、所望の結果は、ユーザーの入力に基づいて検索を行うが、ユーザーは何も(ブランク値)を選択しない場合、その列に存在するすべての結果が得られています。

これが動作していない、これはこれは

$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(); 
を動作しているようだ

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

を動作しているようだ何の結果に

$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

はい私はproperty_categoryで検索を行うには、クエリ内のif文置くことを考えていますが...良いアイデアのように聞こえるIN'は仕事ができるが、それになるだろう '使用 – DragonFire

+0

に値がある場合にのみ、 – BizzyBob

答えて

0

を与えていない今の問題がありますなぜ、私は何かを理解してやるには時間がかかります...

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(); 
関連する問題