Как выполнить запрос MySQL с несколькими предложениями WHERE?

как бы вы выполняли запрос mysql, где пользователь может выбирать из нескольких вариантов. Пример Fox У меня есть форма, которую пользователь может использовать для поиска домов. Теперь у меня есть поле выбора, где вы можете остановиться, хотите ли вы дом, квартиру или что-то еще. Затем у меня есть второй ящик, в котором вы можете выбрать, например, город, в котором хотите дом или квартиру. И, возможно, еще один с максимальной ценой.

Теперь как вы будете выполнять запрос mysql? Моя проблема в том, что я сделал бы это так: if ($ _ POST ["house_type"]! = 0) {$ select = mysql_query ("SELECT * FROM any WHERE type = '". $ _ POST ["house_type"]. " «"); } Но теперь у меня только случай, когда кто-то выбрал тип дома, но не какой-либо другой вариант. Так что я должен делать «if» для каждой возможной комбинации выбранных элементов?

Чтобы подчеркнуть мою проблему:

if(!isset($_POST["house_type"])) { if($_POST["something"] == 0) { $search_select = @mysql_query("SELECT * FROM housedata WHERE something = $_POST["whatever"]); } elseif($_POST["something"] != 0) { $search_select = @mysql_query("SELECT * FROM housedata something = $_POST["whatever"] AND somethingelse = 'whatever'); } } elseif(!isset($_POST["house_type"])) { if($_POST["something"] == 0) { $search_select = @mysql_query("SELECT * FROM housedata WHERE something = $_POST["whatever"]); } elseif($_POST["something"] != 0) { $search_select = @mysql_query("SELECT * FROM housedata something = $_POST["whatever"] AND somethingelse = 'whatever'); } } 

Теперь представьте, что у меня было 10 или 20 разных полей выбора, поля ввода и флажки, и мне нужно было бы выполнить запрос mysql в зависимости от того, какие из этих полей и полей и флажков заполнены. Это будет очень сложный, медленный и ужасный код. Таким образом, есть возможность сделать запрос mysql, например:

 SELECT * FROM whatever WHERE house_data = '".$whatever."' AND (if(isset($_POST["something"])) { whatever = '".$whatever2."' } AND ...; 

Вы понимаете, что я имею в виду? Его немного сложно объяснить, но на самом деле это очень важный вопрос и, вероятно, легко ответить.

Спасибо за помощь! phpheini

Создайте предложение WHERE перед запуском SQL.

Короткий пример:

 $whereClause = ""; if ($_POST['opt1']) { $opt1 = mysql_real_escape_string($_POST['opt1']); $whereClause .= "AND opt1='$opt1'"; } if ($_POST['opt2']) { $opt2 = mysql_real_escape_string($_POST['opt2']); $whereClause .= "AND opt2='$opt2'"; } mysql_query("SELECT * FROM table WHERE 1 ".$whereClause); 

Чтобы указать вам немного в правильном направлении, попробуйте что-то вроде этого:

 if(isset($_POST["something"])) { $where = " AND whatever = '".$whatever2."'"; } else $where = ''; mysql_query("SELECT * FROM whatever WHERE house_data = '".$whatever."'".$where); - if(isset($_POST["something"])) { $where = " AND whatever = '".$whatever2."'"; } else $where = ''; mysql_query("SELECT * FROM whatever WHERE house_data = '".$whatever."'".$where); 
 $where = array(); if($_POST["something"]) { $where[] = " something =".$_POST["something"]; } if($_POST["something2"]) { $where[] = " something2=".$_POST["something2"]; } . . . //build where string $where_ = !(empty($where) ? " WHERE ".implode(" AND ",$where) : ""; //build sql $sql = "SELECT * ... ".$where; 

написать простой строитель запросов

 $where = array(); if($_POST["something"]) { $where[] = sprintf(" something='%s'",$_POST["something"]); 

// sprintf – предотвращение SQL-инъекции}

 if($_POST["something2"]) { $where[] = sprintf(" something2='%s'",$_POST["something2"]); } //build where string $where_str = " WHERE ".implode(" AND ",$where); //build sql $sql = "SELECT * ... $where_str"; 

Вам нужно создать свою строку поиска отдельно, но формат просто

 SELECT * FROM your_table WHERE number = {$number} AND sentence = '{$sentence}'; 

Поскольку вы создаете поисковый запрос на основе логики PHP, сделайте следующее:

 $search = "SELECT * FROM your_table WHERE "; if(isset($whatever)) $search .= "something = '{$whatever}'"; if(isset($whateverelse)) $search .= " AND somethingelse = '{$whateverelse}'"; $search_select = mysql_query($search);