У меня есть таблица со следующими полями
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 .= ")";
Что-то вроде этого ниже должно работать. Обратите внимание, что вам нужно разрешить множественный выбор некоторых значений (например, вы можете выбрать более одного класса в раскрывающемся списке), поэтому вы создаете свой запрос таким образом. Я не тестировал этот фрагмент точно, но использовал этот подход раньше, и он работает.
$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
WHERE
на основе выбранных фильтров. Если вы разместите свой код до сих пор, вы можете получить более конкретную помощь.