PHP - 如何构建多输入搜索

PHP - How to build multiple input search

我有一个包含大约 7 个输入的表单,我想让用户根据他选择的条件进行搜索。

例如: 输入名称可以是:

但我的用户只想选择前 3 个,因此 SQL 查询将如下所示:

SELECT * FROM table WHERE name='.$name.' AND age= '.$age.' AND gender = '.$gender.'

这项工作很棒,但我面临的问题是如何使用 MVC 架构基于用户输入构建始终不同的 SQL 查询。

我的想法是:

// 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;
}

但这只对 "OR" 选择有帮助,对 "AND" 没有帮助。请问有人可以帮我弄清楚如何解决这个问题吗?

如果您正在考虑单个 SQL SELECT 语句,您可能想尝试:

SELECT *
    FROM Table T
    WHERE (@name IS NULL OR T.Name LIKE '%' + @name + '%')
        AND (@age IS NULL OR T.Age = @age)
        ...

这将根据给定条件进行搜索。基本上,在 WHERE 子句上,它告诉您:

如果 @nameNULL

  • 它将显示任何名称的所有记录
  • 否则,它将 return 仅具有相似名称的值