我只是一个基本的SQL用户(现在是mySQL+php)。我有多个输入(条件)搜索框。
例如:
颜色:____
尺寸:____
价格:___
条件:___
折扣%:___
命中计数:___
等等,更多.
用户可以输入一个或多个文件。
对于多个输入,也应该对结果进行过滤。
那么,如何在查询中处理这个多个条件呢?
我很困惑如何编写查询(以前的方式):
SELECT * FROM _item_ WHERE color='silver' AND/OR .... ... ??????
请给我一个简单的样品。
发布于 2011-10-13 08:32:13
最简单的方法是有一个基本查询,即使没有筛选条件,仍然返回结果:
SELECT *
FROM _item_
WHERE 1=1这样,您就可以根据用户界面中指定的内容,轻松地添加额外的条件来进一步过滤结果。因此,如果有人说他们想过滤颜色“银色”和条件“新”,我们只需将这些添加到我们查询的WHERE子句中:
SELECT *
FROM _item_
WHERE 1=1
AND color = 'silver'
AND condition = 'new'每个附加的筛选条件都可以通过AND添加到基本查询的末尾。
编辑:,正如在其他文章中指出的,这是一种幼稚的方法,您需要小心SQL注入,但是最初的问题是一个简单的例子,这是我所能想到的最简单的例子。
发布于 2011-10-13 08:35:38
没有一个简单的解决办法。您可以根据参数从头开始创建动态SQL,也可以为每个参数组合使用不同的SP,或者只需获取所有内容,然后在客户端进行筛选。
但是,对于SQL注入要非常小心。
在进一步研究之前,我建议您阅读一些类似于http://www.sommarskog.se/dyn-search.html和http://www.sommarskog.se/dynamic_sql.html的文章,其中给出了关于这类事情的很多细节。很长但值得。
发布于 2011-10-13 08:37:38
您可以使用聚结来动态构造WHERE子句,如果提供的参数为null,则将使用列值,因此只需确保在适当的地方传递null:
SELECT * FROM Table
WHERE color = COALESCE(@Color,color)
AND condition = COALESCE(@Condition,condition)请注意,这假设使用参数化查询,因此应该是漂亮的SQL注入验证。
https://stackoverflow.com/questions/7751313
复制相似问题