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 幼儿园收费系统 之 动态组合条件查询
实际应用中,系统设计无法预料到用户最终的查询条件是怎样的.通常的做法是给出一些限制死的查询条件让用户查询.业务稍有改动,就要重新设计界面,增加查询字段等,费时费力. 比较好的做法是,除了常用的查询外, ...
随机推荐
- ZCTF-ARM64-Re300
Re300-arm64 是一个64位的ARM程序.使用IDA加载,蹦出来这个框框,就是说IDA6.6还没有对ARM64位的程序实现relocation的分析. 就是由于这个,所以连对l ...
- Time Out 访问数据库超时处理 .NET
using System.Reflection; using System.Data.SqlClient; TransactionSelectTableAdapter adapter = new Tr ...
- (转)12款开源JavaScript库
JavaScipt几乎是所有前端开发人员必会的编程语言,并且,随着各种移动APP的串红,JavaScript还可以用来开发移动应用.除此以外,为了丰富前端/移动开发,有不少开发者推出了各种基于Java ...
- C#获取本周、上周、本月、上月、本季度、上季度、本年、上一年起始时间和结束时间
/// 取得某月的第一天 /// </summary> /// <param name="datetime">要取得月份第一天的时间</param&g ...
- js callback函数
A callback is a function that is passed as an argument to another function and is executed after its ...
- Nodejs随笔(二):像可执行shell脚本一样,运行node 脚本!
在每次编写nodejs脚本的时候,只需在程序的开头加上如下代码(写过shell脚本的人应该很熟悉): #!/usr/local/bin/node 同时,修改文件权限为可执行: mesogene@mes ...
- 图片与文字在div里实现垂直水平都居中
第一种方法,利用盒布局实现 <style type="text/css">/*盒布局实现图片与文字水平垂直居中*/ .div1{ width: 100%; heig ...
- mysql性能优化学习笔记(1)优化目的、方向及数据库准备
前言: 最近参加面试,问到了很多关于mysql的优化方面的问题,回答的不是很好,也是因为原先做的项目流量不是很大,所以对mysql优化不是太了解,所以趁着周末,恶补一下. 本文来源于慕课网sqlerc ...
- Python成长之路第一篇(3)_初识字典
经过上章的学习我们已经了解到了列表可以通过索引来获取对应的值,在本章我们将学到通过名字来索引数据,这种结构的类型称之为映射(maooing),在Python中字典是唯一内建的映射类型,其中的值我们称之 ...
- python 初学笔记 (一)
初学python第一天,希望自己真正了解计算机语言,并且做出成效. 写下学习笔记,记录学习进度,娱乐学习,不断成长. python详细介绍: python是什么?运用到哪里?有哪些在使用它? pyth ...