Mysql动态多条件查询
动态多条件查询是一类经常遇到的问题。
在Mysql里面可以用语句简单的解决。
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语句的工作了)。
下面给出实例代码:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pc_select_tb_position_01`(
in `in_cardid` int,
in `in_bs_id` int,
in `in_posi_date1` int,
in `in_posi_date2` int
)
BEGIN
SELECT `tb_position`.`cardid`,
`tb_position`.`bs_id`,
`tb_position`.`distance`,
`tb_position`.`posi_date`,
`tb_position`.`msecond`
FROM `db_pps_test1`.`tb_position`
where `tb_position`.`cardid` = if(`in_cardid`is null,`tb_position`.`cardid`,`in_cardid`)
and `tb_position`.`bs_id` = if(`in_bs_id`is null,`tb_position`.`bs_id`,`in_bs_id`)
and `tb_position`.`posi_date` >= if(`in_posi_date1`is null,`tb_position`.`posi_date`,`in_posi_date1`)
and `tb_position`.`posi_date` <= if(`in_posi_date2`is null,`tb_position`.`posi_date`,`in_posi_date2`); END$$
DELIMITER ;
我这里设置的是输入的值是null值就忽略此字段。
所以调用的时候就是这样:
CALL `db_pps_test1`.`pc_select_tb_position_01`(1,null, 2,6);
或者
CALL `db_pps_test1`.`pc_select_tb_position_01`(1,null, 2,null);
或者
CALL `db_pps_test1`.`pc_select_tb_position_01`(null,3,null,6);
等等
但是这样就会有一个问题。就是当我四个参数都是null 的时候。就会执行搜索全表的数据。所以要在应用层避免这种情况。
Mysql动态多条件查询的更多相关文章
- EntityFramework动态多条件查询与Lambda表达式树
在常规的信息系统中, 我们有需要动态多条件查询的情况, 例如UI上有多个选择项可供用户选择多条件查询数据. 那么在.net平台Entity Framework下, 我们用Lambd ...
- Silverlight学习(四) domainservice动态多条件查询
上次讲了silverlight+MVVN+EF的简单框架,能够实现简单的数据CURD,但是多条件动态的查询一直没有实现.在网上查阅了很多资料,发现自己走了很多误区,代码很难调试正确. 这次的查询是基于 ...
- 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版
一.前言 多条件查询分页以及排序 每个系统里都会有这个的代码 做好这块 可以大大提高开发效率 所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF ...
- mybatis的mapper特殊字符转移以及动态SQL条件查询
前言 我们知道在项目开发中之前使用数据库查询,都是基于jdbc,进行连接查询,然后是高级一点jdbcTemplate进行查询,但是我们发现还是不是很方便,有大量重复sql语句,与代码偶合,效率低下,于 ...
- Mysql数据库中条件查询
1.concat(字符串拼接) 作用:将选中的列进行拼接 写法 AS的作用就是属性名 SELECT CONCAT(ename,job) AS 你猜 FROM emp; 2.条件查询 语法: sele ...
- Eclipse+Mysql实现多条件查询
最近做一个项目的时候,就需要用到多条件查询,但是一直不完美,所有有bug,不过今天经高人提醒,做出了个小例子,在这里简单跟大家分享一下: 不说多了,直接放关键sql代码: 已知条件:菜名,菜品,价格区 ...
- 10. MySQL基础-02条件查询、排序查询
2. 条件查询 语法 select 查询列表 from 表名 where 筛选条件: 分类 按条件表达式筛选 简单的条件运算符:> < = != <> >= ⇐ 按逻 ...
- ibatis动态多条件查询及模糊查询(oracle,mysql,sql)
首先是模糊查询的问题,开始时我使用如下条件:select * from user where name like '%#value#%'. 可是怎么也不行,好像还报错了.后来在网上找到了解决方法,就是 ...
- spring mvc 4.3.2 + mybatis 3.4.1 + mysql 5.7.14 +shiro 幼儿园收费系统 之 动态组合条件查询
实际应用中,系统设计无法预料到用户最终的查询条件是怎样的.通常的做法是给出一些限制死的查询条件让用户查询.业务稍有改动,就要重新设计界面,增加查询字段等,费时费力. 比较好的做法是,除了常用的查询外, ...
随机推荐
- 充分利用HTML标签元素 – 简单的xtyle前端框架
xtyle框架充分利用语义化标签来做美化样式,兼容多款主流浏览器,包括IE8. xtyle框架虽然没BS这么强大,但我觉得也很实用,体积不算很大,适用于企业网站.WordPress主题.个人网站.博客 ...
- ISG2015
一天的成果. Re300 是男人就下一百层 一个64位的程序,放到IDA里的话,IDA就会分析不动,这样就把人给下着了.objdump –d re300 > output,这样拿到汇编代码,大概 ...
- 计算(a/b)%c
如果b与c互素,则(a/b)%c=a*b^(phi(c)-1)%c 如果b与c不互素,则(a/b)%c=(a%bc)/b 对于b与c互素和不互素都有(a/b)%c=(a%bc)/b成立
- mysql jdbc 查询连接问题
做了一个测试,mysql jdbc 链接A调用setAutoCommit,设置false,查询指定数据,可以查询出来,另个一链接把指定的数据给删除了,第一个链接在此查询的时候,仍然可以查询出来,使用的 ...
- VMware linux 增加根目录空间 (使用图形分区工具gparted LiveCd)
写这篇文章的原因: 最近要给服务器Centos上的ruby版本升级,由于是第一次升级,不敢直接在服务器上操作. 所以在我的winxp上装了Vmware ,又在Vmware中装了Centos5.2. 用 ...
- 使用 Struts 2 实现国际化
struts2国际化(I18N) 国际化也叫I18N,是Internationalization的简称.Struts2国际化是建立在Java国际化基础上,只是Struts2框架对Java国际化进行了进 ...
- HTML3层叠样式表
层叠样式表:CSS Cascading Style Sheet.V2.1 控制页面样式外观. 一.样式表分三类: 1.内联样式表.--放在元素的开始标记中.--只对当前元素起作用. <in ...
- String.Empty、string=”” 和null的区别
String.Empty是string类的一个静态常量: String.Empty和string=””区别不大,因为String.Empty的内部实现是: 1 2 3 4 5 6 7 8 9 10 1 ...
- Collections类方法详解
Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序.搜索以及线程安全等各种操作. 1) 排序(Sort)使用sort方法可以根据元素的自然顺序 对 ...
- linux----LAMP之编译安装apache
第一步:解决依赖.安装apr.apr-util. apr-1.5.4.tar.gz下载地址:http://yunpan.cn/cFBzgsC3rDcyR 访问密码 4c82 apr-util-1.5 ...