mysql — как построить множественный поиск

У меня есть форма с примерно 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;
}

Но это помогает только с выбором «ИЛИ», а не с «И». Пожалуйста, может кто-нибудь помочь мне разобраться, как решить эту проблему?

-1

Решение

Если вы рассматриваете один 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

  • Он будет отображать все записи с любым именем
  • Иначе, он вернет значения только с похожим именем
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]