2016-11-07 3 views
1

У меня есть форма с тремя параметрами поиска.Поиск по Sql, который позволяет использовать невыбранные параметры

SELECT users.* FROM users WHERE users.genre = ? AND users.country = ? AND users.city = ? 

Этот запрос возвращает только результат, если все три критерия удовлетворяются

SELECT users.* FROM users WHERE users.genre = ? OR users.country = ? OR users.city = ? 

этот запрос возвращает только результат, если только один критерий правильно встретил

Что мне нужно, так это:

Если кто-то подает «Австралию» для страны и оставляет жанр и пустое место, они получают все результаты для Австралии.

(city=Australia&genre=&country=) 

Если кто-то утверждает, «Австралия» для страны и «рок» для жанра и оставляет пустым они получают все результаты для Австралии и «рок».

(city=Australia&genre=&rockcountry=) 

на данный момент, если я оставляю пустое значение в форме, оно не дает мне никаких результатов, поскольку я думаю, что он ищет MySQL для пустых ячеек?

Thanx

<php 
$Recordset1 = new WA_MySQLi_RS("Recordset1",$alpha,1); 
$Recordset1->setQuery("SELECT users.* FROM users WHERE users.genre = ? AND users.country = ? AND users.city = ?"); 
$Recordset1->bindParam("s", "".((isset($_POST["genre"]))?$_POST["genre"]:"") ."", "-1"); //WAQB_Param1 
$Recordset1->bindParam("s", "".((isset($_POST["country"]))?$_POST["country"]:"") ."", "-1"); //WAQB_Param2 
$Recordset1->bindParam("s", "".((isset($_POST["city"]))?$_POST["city"]:"") ."", "-1"); //WAQB_Param3 
$Recordset1->execute(); 
?> 

думал, что это может работать

<?php 
if ((isset($_POST["country"]) && $_POST["country"] != '')) 
{?> 
<?php 
$Recordset1 = new WA_MySQLi_RS("Recordset1",$alpha,1); 
$Recordset1->setQuery("SELECT users.* FROM users WHERE users.country = ?"); 
$Recordset1->bindParam("s", "".((isset($_POST["country"]))?$_POST["country"]:"") ."", "-1"); //WAQB_Param2 
$Recordset1->execute(); 
?> 
<?php } ?> 

<?php 
if ((isset($_POST["country"]) && $_POST["country"] != '') && (isset($_POST["city"]) && $_POST["city"] != '')) 
{?> 
<?php 
$Recordset1 = new WA_MySQLi_RS("Recordset1",$alpha,1); 
$Recordset1->setQuery("SELECT users.* FROM users WHERE users.genre = ? AND users.country = ? AND users.city = ?"); 
$Recordset1->bindParam("s", "".((isset($_POST["country"]))?$_POST["country"]:"") ."", "-1"); //WAQB_Param2 
$Recordset1->bindParam("s", "".((isset($_POST["city"]))?$_POST["city"]:"") ."", "-1"); //WAQB_Param3 
$Recordset1->execute(); 
?> 
<?php } ?> 


<?php 
if ((isset($_POST["country"]) && $_POST["country"] != '') && (isset($_POST["city"]) && $_POST["city"] != '') && (isset($_POST["genre"]) && $_POST["genre"] != '')) 
{?> 
<?php 
$Recordset1 = new WA_MySQLi_RS("Recordset1",$alpha,1); 
$Recordset1->setQuery("SELECT users.* FROM users WHERE users.genre = ? AND users.country = ? AND users.city = ?"); 
$Recordset1->bindParam("s", "".((isset($_POST["genre"]))?$_POST["genre"]:"") ."", "-1"); //WAQB_Param1 
$Recordset1->bindParam("s", "".((isset($_POST["country"]))?$_POST["country"]:"") ."", "-1"); //WAQB_Param2 
$Recordset1->bindParam("s", "".((isset($_POST["city"]))?$_POST["city"]:"") ."", "-1"); //WAQB_Param3 
$Recordset1->execute(); 
?> 
<?php } ?> 

, но его очень подробный и не охватывает все параметры поиска, например, если пользователь выбирает страну и жанр, он не рассматривается выше, если я не пишу код для каждого конкретного поиска.

+0

Можете ли вы попытаться установить значение NULL, если не найдено в queryString. А также использовать функцию TRIM для поиска лучшего результата –

ответ

0

Рассматривает строить свой ИНЕК динамически:

$sql = "SELECT * WHERE "; 
if (isset($_POST["genre"]) { 
    $sql .= 'users.genre = :genre OR '; 
} 
... same for other criteria 

// chop off the extra ' OR ' on the end (simpler than tracking when to add one above) 
$sql = substr($sql, -4); 

$Recordset1->setQuery($sql); 
if (isset($_POST["genre"])) { 
    $Recordset1->bindParam(':genre', $_POST["genre"], PDO::PARAM_STR); 
} 
... same for other criteria 

примечания стороны, я не знаю, почему у вас есть все эти ?> </php паров, разбросанных по коде. Они ничего не могут сделать, кроме вреда.

Смежные вопросы