0

私はクエリを作成しようとしていますが、これはWHEREこれまでのところその句です。

WHERE ( s.subject_name LIKE '%$keyword%' OR
        c.city_name LIKE '%$keyword%' OR
        o.option_name LIKE '%$option%' OR
        d.district_id = $districtId OR
        c.city_id = $cityId
       )

私の実際の状態は次のとおりです。

  • $keyword常に値を保持する必要があります。他の3つはそうではないかもしれません。
  • 値しかない場合$keyword、返されるレコードは またはで一致$keywordする必要があります。subject_namecity_name
  • $optionalがある場合、返されるレコードは一致$keywordし、 $option
  • に値$districtIdがある場合、結果は3つの変数値(、、)と一致する必要$keywordがあり$optionます$districtId
  • 最後$cityIdに、他の3つと一緒に値がある場合、返される結果は4つの変数すべての値と一致する必要があります。

これらの条件は私の検索ページから来ています。$keywordはテキストボックスの値であり、検索を開始するにはキーワードが必要です。だから私はそれが常に価値があると言ったのです。他の3つの値は、必要なときにアイテムを選択できる選択ボックスから取得されます。

私はクエリを作成しようとしました、それは大丈夫です。しかし、私はそのWHERE条項と本当に混乱しています。上記のコードは、WHEREこれまでの私の条項からのものです。しかし、希望する結果が得られません。

4

1 に答える 1

1

純粋なSQLでこれを実現したい場合は、これが必要です(または、少なくとも十分に近い必要があります)。

WHERE (
    ( s.subject_name LIKE '%$keyword%' OR c.city_name LIKE '%$keyword%' )
    AND ('$option' = '' OR (
        o.option_name LIKE '%$option%' AND (
            '$districtId' = '' OR (
                d.district_id = $districtId AND (
                    '$cityId' = '' OR c.city_id = $cityId
                )
            )
        )
    )
)

ただし、これははるかに最適ではありません。代わりに、PHPでユーザー入力の内容を確認し、この入力に応じて異なるクエリを実行する必要があります。クエリを動的に作成することもできます。

$query = "SELECT ...";

$query .=
    " WHERE ( ( s.subject_name LIKE '%$keyword%' OR c.city_name LIKE %$keyword%' )";
if ( !empty($option) ) {
    $query .= " AND o.option_name LIKE '%$option%'";
    if ( !empty($districtId) ) {
        $query .= " AND d.district_id = $districtId";
            if ( !empty($cityId) ) {
                $query .= " AND c.city_id = $cityId";
            }
    }
}
$query .= ')';
于 2013-02-20T03:32:13.847 に答える