PHP - 如何构建多输入搜索

时间:2015-08-03 09:33:04

标签: php mysql model-view-controller nette

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

1 个答案:

答案 0 :(得分: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

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