こんにちは私は私の検索エンジン用のフィルターをコーディングするのが好きです。さまざまな選択クエリに問題があります。したがって、主なアイデアは、次のようなチェックボックスを備えた入力フィールドがあるということです。
入力フィールドa:[ _ ]フィルターのオン/オフ:[]
入力フィールドb:[ _ ]フィルターのオン/オフ:[]
入力フィールドc:[ _ ]フィルターのオン/オフ:[]
クエリを設定するには、各フィールドのクエリに名前を付けます。
if ($filter_a == true) {
$filter_1 =" `a` LIKE '%$input_a%' ";
}
if ($filter_b == true) {
$filter_2 =" `b` LIKE '%$input_b%' ";
}
if ($filter_c == true) {
$filter_3 =" `c` LIKE '%$input_c%' ";
}
したがって、フィルターが有効になっている場合、選択クエリは次のような特定の方法で変更する必要があります。
filter_aが有効になっている場合:
$query = "SELECT `a`, `b`, `c` FROM `table` WHERE $filter_a";
filter_aおよびfilter_bが有効になっている場合:
$query = "SELECT `a`, `b`, `c` FROM `table` WHERE $filter_a AND filter_b";
filter_a AND filter_b AND filter_cが有効になっている場合:
$query = "SELECT `a`, `b`, `c` FROM `table` WHERE $filter_a AND filter_b AND filter_c";
クエリに「AND」を追加する際に問題が発生しました。そのため、設定されているフィルターの数をカウントするカウンターを統合しました。
$counter = 0;
...
if(!empty($_POST['input_a']) && (!empty($_POST['checkbox_filter_1'])) ){
$filter++;
}
...
if ($counter == 2) {
$and1 = " AND ";
$query = "SELECT `a`, `b`, `c` FROM `table` WHERE $filter_a $and1 filter_b";
}
したがって、主な問題は順列です。この時点までに私は5つのフィルターを持っています。これは、比較する可能性のある125の可能性があることを意味します。
したがって、次のアイデアは、クエリごとに配列を作成して順序付けすることです。
したがって、次のようになります。
$ordered_query = (
1-> `a` LIKE '%$input_a%',
2-> `b` LIKE '%$input_b%',
3-> `c` LIKE '%$input_c%');
すべてのクエリが1つの配列に含まれるようにします。次のステップは、設定されているかどうかに関係なく、それらを注文することです。
したがって、filter_3とfilter_1を有効にする場合は、配列キーを並べ替える必要があります。
$ordered_query = ( 1-> input_a 2-> input_c );
クエリはそれらの間にANDを自動的に追加する必要があります。すべての有効なフィルターの場合、間に2つのANDが必要です。
私を助けてくれる人がいたら、本当にありがたいです。
どうもありがとう。