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
子句上,它告诉您:
如果 @name
是 NULL
- 它将显示任何名称的所有记录
- 否则,它将 return 仅具有相似名称的值
我有一个包含大约 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
子句上,它告诉您:
如果 @name
是 NULL
- 它将显示任何名称的所有记录
- 否则,它将 return 仅具有相似名称的值