Chinaunix首页 | 论坛 | 博客
  • 博客访问: 356638
  • 博文数量: 306
  • 博客积分: 3975
  • 博客等级: 中校
  • 技术积分: 3265
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-27 13:14
文章分类

全部博文(306)

文章存档

2017年(1)

2016年(3)

2015年(11)

2014年(15)

2013年(178)

2012年(41)

2011年(38)

2010年(9)

2009年(9)

2008年(1)

分类: LINUX

2017-12-14 19:08:59

在做搜索页面时,我们经常会遇到多条件查询,且这些条件是不定的,也就是说当用户输入的条件参数为空时,该条件是不应该加到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语句的工作了)。

阅读(994) | 评论(0) | 转发(0) |
0

上一篇:KVM虚拟机应用扩容

下一篇:没有了

给主人留下些什么吧!~~