Это кажется такой простой задачей, но мне трудно найти решение, которое мне нравится для этого. Я не могу найти ничего, что я бы рассматривал, кроме как неуклюжий. Вот с чем я работаю:
Существует форма поиска, которая публикует переменные в сценарии обработки. Эти переменные являются фильтрами запрашиваемых данных. В зависимости от прав пользователя, может появиться больше или меньше переменных, в зависимости от фильтров, к которым у них есть доступ. Каждый фильтр ссылается на поле в таблице, из которой получены результаты. Одна опция для каждого фильтра также «ЛЮБАЯ», поэтому предложение WHERE не требуется.
Какой хороший способ построить строку запроса. Допустим, возвращаются четыре переменные: $ firstname, $ lastname, $ age, $ dob. Но только некоторые пользователи имеют доступ к фильтрам по $ age и $ dob.
$query = "SELECT * FROM people";
if(($firstname != 'ANY' && !empty($firstname)) ||
($lastname != 'ANY' && !empty($lastname)) ||
($age != 'ANY' && !empty($age)) ||
($dob != 'ANY' && !empty($dob))) {
$query .= " WHERE";
}
if($firstname != 'ANY' && !empty($firstname)) {
$query .= " firstname='$firstname'";
}
if($lastname != 'ANY' && !empty($lastname)) {
if($firstname != 'ANY' || !empty($firstname)) {
$query .= " AND";
}
$query .= " lastname='$lastname'";
}
...
И так далее. Но это выглядит глупо, ужасно и смехотворно неэффективно для меня. Я использую слегка измененный шаблон MVC, поэтому имеет ли смысл создавать методы в модели поиска для каждого возможного фильтра?