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 的时候。就会执行搜索全表的数据。所以要在应用层避免这种情况。

时间: 2024-11-05 14:38:21

Mysql动态多条件查询的相关文章

EntityFramework动态多条件查询与Lambda表达式树

          在常规的信息系统中, 我们有需要动态多条件查询的情况, 例如UI上有多个选择项可供用户选择多条件查询数据. 那么在.net平台Entity Framework下, 我们用Lambda表达式树如何实现, 这里我们需要一个PredicateBuilder的UML类图: 实现的代码是这样的: /// <summary> /// Enables the efficient, dynamic composition of query predicates. /// </summ

Silverlight学习(四) domainservice动态多条件查询

上次讲了silverlight+MVVN+EF的简单框架,能够实现简单的数据CURD,但是多条件动态的查询一直没有实现.在网上查阅了很多资料,发现自己走了很多误区,代码很难调试正确. 这次的查询是基于上次的查询,只是增加了一个查询条件,动态多条件的查询的重点是获取查询的语言. 1 private string GetSql() 2 { 3 string query = "1=1"; 4 if (!string.IsNullOrEmpty(searchText.name)) 5 { 6

动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版

一.前言 多条件查询分页以及排序  每个系统里都会有这个的代码 做好这块 可以大大提高开发效率  所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF 在做多条件搜索时 都有这类似的代码 这样有几个不好的地方 1.当增加查询条件,需要改代码,对应去写相应的代码. 2.对多表查询以及or的支持 不是很好.而我们很常见的需求不可能是一个表的查询 3. 这样写表示层直接出现 了SQL语句 或者 linq 的拉姆达表达式  这是很不好的 表示层不应该知道数

ibatis动态多条件查询及模糊查询(oracle,mysql,sql)

首先是模糊查询的问题,开始时我使用如下条件:select * from user where name like '%#value#%'. 可是怎么也不行,好像还报错了.后来在网上找到了解决方法,就是使用$来代替#号. 1>写成: like '%$value$%' 就可以了,<!-- 模糊查询不能用#,#是用prepareStatement的?插入参数,$是文本替换 -->, 2>同时还找到另一个方法,但是那个方法我试了很久,就是不行,方法为: like '%' || #value

spring mvc 4.3.2 + mybatis 3.4.1 + mysql 5.7.14 +shiro 幼儿园收费系统 之 动态组合条件查询

实际应用中,系统设计无法预料到用户最终的查询条件是怎样的.通常的做法是给出一些限制死的查询条件让用户查询.业务稍有改动,就要重新设计界面,增加查询字段等,费时费力. 比较好的做法是,除了常用的查询外,给出一个高级的查询条件功能,让用户自己组织查询条件.截图如下,具体实现稍后给出. 下图就是用户点击高级查询时,弹出条件组合窗口,让用户自己组合.这样做,开发省力,又能满足用户的未来需求.

(转)Entity Framework4.1实现动态多条件查询、分页和排序

原文:http://www.cnblogs.com/ahui/archive/2011/08/04/2127282.html EF通用的分页实现: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /// <summary> /// 根据条件分页获得记录 /// </summary> /// <param name="where">条件</param> /// <

SqlDataSource 动态组合条件查询

1.使用查询编辑器生成查询语句,在对应条件字段筛选器设置" = ? or ? is NULL",生成如下语句: sql * from table where 字段1 = @参数1 and (字段2 = ? or ? is NULL) 2.点击确定后,返回到“命令与参数编辑器”,刷新参数,自动生成2个新的参数,默认名均为"?".为区分参数,可分别重命名.不重命名也可以,.net在执行时,应该是使用索引来进行参数匹配的.将两个参数的取值均绑定到同一个控件上 3.SqlD

mysql按照时间条件查询 忽略是时分秒查询

数据库保存的是2018-11-06 12:22:23这种格式数据然后页面查询条件是>=2018-11-06和<=2018-11-06,想把6号的数据都查询出来但是因为有时分秒导致<=2018-11-06不成立:所以查不出数据1:格式化数据库日期date_format(b.CREATE_TIME,'%Y-%m-%d00:00:00') AS datetime,2:格式化查询条件cq.ge("dateTime", new SimpleDateFormat("yy

生成jFinal的动态条件查询语句的工具类

因为有时候需要根据前台的多个条件来过滤数据!因此需要根据是否有值以及当前值是以什么方式来过滤.这样我们不可能一个一个值来判断吧!这样代码就有些难看了!而jFinal也没有提供这样的方法,而网上的一些解决方法感觉不太好用麻烦而且不够灵活!基于这个考虑我就自己写了一个工具类!目前来说用着还挺方便的!如果有什么不对或者改进的地方请指正,大家共同进步! /**  * 用于生成JFinal的SQL查询语句<br>  * 类名称:Conditions<br>  * 创建人:yangxp<