我有一个包含大约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”有关。有人可以帮我弄清楚如何解决这个问题吗?
答案 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
子句中,它告诉您:
如果@name
为NULL