MySQL中动态生成多条件查询语句
2007-10-24 22:34
731 查看
在做搜索页面时,我们经常会遇到多条件查询,且这些条件是不定的,也就是说当用户输入的条件参数为空时,该条件是不应该加到SQL语句中去的。举例来说,我们要对一个产品表product进行搜索,可能的条件是这样的:1、价格为100;2、产品名包含关键字p,写成条件就是WHERE price = 100 AND name LIKE '%p%',问题是这里的100和关键字p都是用户进行的选择或输入,当用户并没有选择或输入其中的一项时,该项的过滤条件也就不应当存在,这样我们在页面中就需要进行逻辑判断,当条件越多,if语句也就出现得越多,页面中就出现了大量的组合SQL语句的逻辑,这显然增加了写程序的工作量以及维护代码的难度。
解决方案:将这类复杂的查询SQL语句(说它复杂,是因为需求多变,可能查询的字段不同,可能需要联合几个表进行查询,可能排序规则不同)先写成模板放入专门的SQL模板文件中,针对MySQL,上面提到的问题涉及到的SQL模板语句如下:SELECT * FROM product WHERE price = IF('{0}' = '', price, '{0}') AND name LIKE IF('{1}' = '', name, '%{1}%') 这里的price和name分别为产品表中的两个字段名,{}标志位是我们要将参数替换进去的地方,这样在查询页面只需调用SQL模板语句,并替换相应的参数即可。(假设用户没有过滤价格,则{0}为空,那么得到的SQL语句类似于:SELECT * FROM product WHERE price = price AND name LIKE 'p',其中price = price就起到了不进行过滤的作用,这样就达到了动态生成多条件查询语句的目的,页面中也就不需要进行繁琐的组合SQL语句的工作了)。
解决方案:将这类复杂的查询SQL语句(说它复杂,是因为需求多变,可能查询的字段不同,可能需要联合几个表进行查询,可能排序规则不同)先写成模板放入专门的SQL模板文件中,针对MySQL,上面提到的问题涉及到的SQL模板语句如下:SELECT * FROM product WHERE price = IF('{0}' = '', price, '{0}') AND name LIKE IF('{1}' = '', name, '%{1}%') 这里的price和name分别为产品表中的两个字段名,{}标志位是我们要将参数替换进去的地方,这样在查询页面只需调用SQL模板语句,并替换相应的参数即可。(假设用户没有过滤价格,则{0}为空,那么得到的SQL语句类似于:SELECT * FROM product WHERE price = price AND name LIKE 'p',其中price = price就起到了不进行过滤的作用,这样就达到了动态生成多条件查询语句的目的,页面中也就不需要进行繁琐的组合SQL语句的工作了)。
相关文章推荐
- MySQL中动态生成多条件查询语句
- 生成jFinal的动态条件查询语句的用法
- 动态生成SQL查询条件定制表单及语句的脚本
- MySQL中根据if标签实现多条件模糊查询(动态SQL语句)
- XsqlFilterResult----动态生成sql语句的类,过滤一些为空的查询条件
- hibernate常用查询语句动态生成类(包括条件和无条件查询)
- hibernate常用查询语句动态生成类(包括条件和无条件查询)
- 生成jFinal的动态条件查询语句的工具类 3ff8
- 使用Python读取TestTrack记录- Part3 动态生成Linq to xml查询语句筛选条件
- 存储过程生成动态条件查询语句
- oracle 查询语句根据参数值来动态生成条件
- XsqlFilterResult----动态生成sql语句的类,过滤一些为空的查询条件
- Jfinal适用于条件查询的动态SQL语句生成工具
- 动态生成多条件查询语句
- XsqlFilterResult----动态生成sql语句的类,过滤一些为空的查询条件 .
- Mybatis+mysql动态分页查询数据案例——条件类(HouseCondition)
- mysql查询符合某种条件的语句是第几条
- MySql依据查询结果,生成insert、update语句
- 【转】ibatis.net中的单个参数查询、多个参数查询和实体类查询以及动态SQL语句生成查询
- 动态SQL语句根据数据库列来查询数据,动态的生成列名称