PHP и SQL запрос нескольких / условных фильтров

0

У меня есть таблица со следующими полями

id | Name         | Gender | Country | Math | English | Science
---------------------------------------------------------------
1  | Paul Allen   | Male   | USA     | 4    | 2       | 
2  | Andrew Cur   | Male   | GBR     |      | 1       | 2
3  | Paul Hanz    | Male   | GER     | 5    | 2       | 2
4  | Angela Dow   | Female | AUT     | 3    |         | 1
5  | Dana Loconto | Female | USA     | 2    |         |

Моим пользователям разрешено фильтровать эту таблицу разными способами, используя форму html и php. Они могут фильтровать по имени пользователя, фильтровать по странам, фильтровать по полу. Это довольно просто. Моя проблема заключается в том, что мне нужно также фильтровать в зависимости от класса. Например:

"Я хочу знать всех женщин, которые имеют математический класс 2 И 3, а также имеют степень" Наука "1".

Хотя я знаю, как писать запрос вручную с помощью AND и OR, мне сложно организовать окончательный запрос в зависимости от параметров, которые мои пользователи передают с помощью формы. Специально, когда дело доходит до оценок.

Любые идеи, чтобы направить меня на правильный путь?

EDIT: после нескольких предложений я также использовал следующее:

 'code' $cchair = count($_POST['f_chair']);
$commas = 1; 
$query_officials .= " AND o_math IN (";
foreach($_POST['f_math'] as $val) { 
$query_officials .= "'".$val."'"; 
if ($commas < $cchair) { $query_officials .= ", "; $commas++; } 
}
$query_officials .= ")";
  • 0
    Используйте PHP для условного включения WHERE на основе выбранных фильтров. Если вы разместите свой код до сих пор, вы можете получить более конкретную помощь.
  • 0
    См. Meta.stackoverflow.com/questions/333952/…
Теги:
filter

1 ответ

0
Лучший ответ

Что-то вроде этого ниже должно работать. Обратите внимание, что вам нужно разрешить множественный выбор некоторых значений (например, вы можете выбрать более одного класса в раскрывающемся списке), поэтому вы создаете свой запрос таким образом. Я не тестировал этот фрагмент точно, но использовал этот подход раньше, и он работает.

$query = "select * from mytable where " 
If(isset($_POST['gender']) {  //First field
    $query .=  "gender = " . $_POST['gender']
}

If(isset($_POST['math']) {  //Second field (array type of field since there could be more than one choice in the drop down)
    $query .=  "AND math in ( ";
    foreach($_POST['math'] as $value)
        {
            $query .= $value . ','
        }
    $query .= ')';
}
//You repeat this for every field that has a value from your form
  • 0
    Мне нравится ваш подход. Сначала я добавил 5 различных возможных оценок для флажков, которые затем генерируют ОДНУ различную переменную POST для каждого. Я предполагаю, что если я использую форму множественного выбора, они будут представлены в виде массива, чтобы я мог их циклически просматривать? Это немного облегчает. Я постараюсь использовать ваш подход и посмотрю, с чем я приду.
  • 0
    У меня простой вопрос. Как бы я поступил, потому что после значения LAST в цикле "," исчезают? Это дает мне ошибку, если мой запрос имеет «,» после последнего значения внутри IN.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню