У меня есть форма с примерно 7 входами, и я хочу позволить пользователю выполнять поиск в соответствии с критериями, которые он выбирает.
Так, например:
Имя входа может быть:
Но мой пользователь хочет выбрать только первые 3, поэтому SQL-запрос будет выглядеть так:
SELECT * FROM table WHERE name='.$name.' AND age= '.$age.' AND gender = '.$gender.'
Охладите эту работу, но я столкнулся с проблемой того, как СОЗДАТЬ всегда разные SQL-запросы на основе пользовательского ввода с использованием архитектуры MVC.
Моя идея была такой:
// Syntax is from Nette Framework so please don't care about it, I basicly need logic for it in MVC
public function findMatch($name= NULL, $age= NULL, $gender = NULL)
{
$selection = $this->database->table('table');
if ($name) {
$selection = $selection->where('name', $name);
}
if ($age) {
$selection = $selection->where('age', $age);
}
if ($gender) {
$selection = $selection->where('gender', $gender);
}
return $selection;
}
Но это помогает только с выбором «ИЛИ», а не с «И». Пожалуйста, может кто-нибудь помочь мне разобраться, как решить эту проблему?
Если вы рассматриваете один SQL SELECT
Скажите, вы можете попробовать:
SELECT *
FROM Table T
WHERE (@name IS NULL OR T.Name LIKE '%' + @name + '%')
AND (@age IS NULL OR T.Age = @age)
...
Это будет искать базу по заданным критериям. В основном на WHERE
пункт, он говорит вам, что:
если @name
является NULL
Других решений пока нет …