-1

我有一个包含大约 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”。请问有人可以帮我弄清楚如何解决这个问题吗?

4

1 回答 1

3

如果您正在考虑单个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

  • 它将显示具有任何名称的所有记录
  • 否则,它将仅返回具有相似名称的值
于 2015-08-03T09:50:40.190 回答