1

私は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

今私がexacltyしたいのは

  1. このクエリでは、nameキーワードのテキストフィールドを使用して、NameまたはZipCodeの列名を検索する必要があります。つまり、キーワードが[名前]列または郵便番号と一致します。
  2. キーワードが入力されておらず、ドロップダウンから国のみが選択されている場合にも、クエリは機能するはずです。
  3. キーワードまたは国が入力されておらず、ドロップダウンからカテゴリのみが選択されている場合にも、クエリは機能するはずです。

もっと簡単に言えば、キーワード、国、カテゴリのいずれかが選択されている場合、検索結果はそれに応じて表示されます。さらに、すべてのフィールドが入力されている場合にも機能するはずです。私はそれの半分をなんとかやったが、時々それは私に間違った結果を与える。助けてください。

4

2 に答える 2

9

どのフィールドが設定されているかを確認し、実行時にそれに応じてクエリを実行できます。あなたができるこのような何か:

$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'"
}
于 2012-11-09T17:02:39.153 に答える
1

いくつかの異なるクエリ(検索パラメーターの組み合わせごとに1つ)を使用することをお勧めします。phpを使用して、どちらを使用するかを決定するか、phpを使用して動的にビルドします。

%で始まるlikeの使用は、非常に遅くなる可能性があることに注意してください。

あなたが本当にそれを一つの声明としてやりたいのなら(そして私はそれをお勧めしません):-

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);
}
于 2012-11-09T16:47:38.093 に答える