Я новичок в php и mysql, поэтому мне нужна помощь с моим запросом. Это мой запрос sql
SELECT * FROM table1 WHERE (Name LIKE '%$keyword%' OR ZipCode LIKE '%$keyword%') AND Category LIKE '$category' AND Country LIKE '$country' LIMIT $start, $limit
Теперь то, что я хочу сделать, это
В более простых словах, если выбрано какое-либо из ключевых слов, страны или категории, поиск должен отображать результаты соответственно. Кроме того, он также должен работать, если вводятся все поля. Мне удалось сделать половину этого, но иногда это дает мне неправильные результаты. Пожалуйста помоги.
Вы можете проверить, какие из полей установлены, и сделать запрос соответствующим образом во время выполнения. что-то вроде этого вы можете сделать:
$query = ""; $keyword = $_REQUEST['keyword']; $country = $_REQUEST['country']; $category = $_REQUEST['category']; if(isset($keyword)){//if keyword set goes here $query = "SELECT * FROM table1 WHERE Name LIKE '%$keyword%' OR ZipCode LIKE '%$keyword%' OR country LIKE '%$keyword%'"; if(isset($category)){ $query .= "AND category LIKE '$category'"; } if(isset($country)){ $query . = "AND country LIKE '$country'" } }else if (isset($category)){ //if keyword not set but category set then goes here $query = "SELECT * FROM table1 WHERE category LIKE '$category'"; if(isset($country)){ $query . = "AND country LIKE '$country'"; } }else if(isset($country)){//if only country set goes here $query = "SELECT * FROM table1 WHERE country LIKE '$country'" }
Я бы предложил использовать несколько разных запросов (по одному для каждой комбинации параметров поиска), используя php, чтобы решить, использовать или динамически строить один с php.
Обратите внимание, что использование типа, начинающегося с%, вероятно, будет довольно медленным.
Если вы действительно хотели сделать это как одно утверждение (и я не рекомендую его), то:
SELECT * FROM table1 WHERE (Name LIKE '%$keyword%' OR ZipCode LIKE '%$keyword%' OR '$keyword' = '') AND (Category = '$category' OR '$category' = '' ) AND (Country = '$country' OR '$country' = '' ) LIMIT $start, $limit
Или динамически наращивать его
$ConditionArray = array(); if ($keyword != '') $ConditionArray[] = "(Name LIKE '%$keyword%' OR ZipCode LIKE '%$keyword%' OR '$keyword' = '')"; if ($category != '') $ConditionArray[] = "Category = '$category'"; if ($country != '') $ConditionArray[] = "Country = '$country'"; if (count($ConditionArray) > 0) { $query = " SELECT * FROM table 1 WHERE ".implode(' AND ', $ConditionArray); }