привет, я хочу закодировать фильтр для своей поисковой системы. У меня есть некоторые проблемы с различными выборами. поэтому основная идея заключается в том, что у меня есть некоторые inputfields с флажками, как:сортировка массива и добавление AND к запросу
InputField в: [_] фильтр вкл/выкл: []
InputField б: [_] фильтр вкл/выкл: []
InputField с: [_] фильтр вкл/выкл: []
установить запрос я назвал запрос для каждого поля:
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 И filter_b И filter_c:
$query = "SELECT `a`, `b`, `c` FROM `table` WHERE $filter_a AND filter_b AND filter_c";
У меня возникли проблемы с добавлением «И» к запросам. therfor я интегрировал счетчик, который подсчитывает, сколько фильтров установлено:
$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%');
так, что у меня есть все запросы в одном массиве. следующим шагом должно быть упорядочить их в отношении фильтров, которые установлены или нет.
поэтому в случае включения filter_3 и filter_1 он должен заказать ключи массива:
$ordered_query = (1-> input_a 2-> input_c);
и запрос должен automaticallyadd и между ними. в случае всех разрешенных фильтров между ними должно быть 2 AND.
если есть кто-то, кто мог бы помочь мне, я действительно был бы признателен.
спасибо большое.
хороший разработчик будет предвидеть случай, когда все условия были пусты –
Да, и это будет очевидно, когда кто-то попытается использовать его с пустым массивом. Кроме того, во многих случаях запрос содержит некоторое условие, поэтому он становится «SELECT ... WHERE condition AND» .implode (...) '. В этом случае вам не нужно проверять пустоту. Я просто ответил на то, что было задано. –
хорошо, проблем нет. ответьте на то, что было задано –