SQL:处理多个SELECT条件



我只是一个基本的SQL用户(mySQL+php现在)。我有搜索框与多个输入(条件)。

例如:

颜色: _ ___
大小: __ _ _
价格: _ __
条件: __ _
折扣%:___
点击次数:___
等等,更多............

用户可输入1个或多个字段
结果也应该对多个输入进行过滤。
那么,我如何在查询中处理这多个条件?

我很困惑如何写查询(以以前的方式):
SELECT * FROM _item_ WHERE color='silver' AND/OR .... ... ?????????

请提供一个简单的示例

最简单的方法是有一个基本查询,即使没有过滤条件,仍然返回结果:

SELECT * 
FROM _item_ 
WHERE 1=1
然后,

允许您根据用户界面中指定的内容轻松添加额外的标准来进一步过滤结果。因此,如果有人说他们想要过滤颜色"silver"和条件"new",我们只需将这些添加到查询的WHERE子句中:

SELECT *
FROM _item_
WHERE 1=1
AND color = 'silver'
AND condition = 'new'

每个附加的过滤条件都可以用AND添加到基本查询的末尾。

edit:正如在其他帖子中指出的,这是一个naïve方法,你需要小心SQL注入,但最初的问题要求一个简单的例子,这是我能想到的最简单的。

没有一个简单的解决方案。你可以根据参数从头开始创建动态SQL或者你可以为每个参数组合使用一些不同的SP或者你可以获取所有内容然后在客户端过滤或…

但是要非常小心SQL注入。

我建议,在继续之前,你阅读像http://www.sommarskog.se/dyn-search.html和http://www.sommarskog.se/dynamic_sql.html上面有很多关于这类事情的细节。

您可以使用COALESCE动态构造WHERE子句,如果提供的参数为null,则将使用列值,因此您只需要确保在适当的地方传递null:

SELECT * FROM Table
WHERE color = COALESCE(@Color,color)
AND condition = COALESCE(@Condition,condition)

请注意,这假定使用了参数化查询,因此应该是非常防SQL注入的。

最新更新