之前遇到一个很麻烦的条件查询。就是有很多个条件,并且条件可能有,也有可能没有。又不是像mybatis那样又专门的SQL.xml文件,需要自己写sql文。这种情况下,需要去判断每个条件是不是为空,后来发现一个很有用的sql语句,能非常简单的解决这个问题。

我们先上表:

CREATE TABLE `clazz` (

`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键',

`title` VARCHAR(140) NOT NULL DEFAULT '0' COMMENT '题目',

`desc` VARCHAR(200) NULL DEFAULT NULL COMMENT '课节描述',

`courseId` INT(11) NOT NULL DEFAULT '1' COMMENT '所属课程',

`video` VARCHAR(200) NULL DEFAULT NULL COMMENT '课节视频地址',

`work` INT(11) NOT NULL DEFAULT '0' COMMENT '0是无效,1是有效',

`createId` INT(11) NOT NULL COMMENT '创建课节的管理员id',

`createTime` DATETIME NULL DEFAULT NULL COMMENT '课节创建时间',

`order` INT(11) NULL DEFAULT '0' COMMENT '顺序',

`level` INT(11) NOT NULL DEFAULT '0' COMMENT '0是免费课程,1是付费课程',

PRIMARY KEY (`id`)

)

COMMENT='课节'

COLLATE='utf8_general_ci'

ENGINE=InnoDB

AUTO_INCREMENT=10

;

我们的查询条件有title、desc、courseId、creatId、creadTime五个条件,desc为模糊查询。这种多条件的情况下,我一开始时每个条件都会依次去判断是不是存在,然后根据判断结果去写sql文,这样下来这个方法的内容时非常庞大并且很容易出错的。我在网上找了找,然后发现了一个方法,按照那个方法是这个样的:select * from 表 where (字段=条件 or 条件=' ');这句SQL,我是这样理解的,当条件不为空时SQL就是这样的:select * from 表 where 字段=条件; 当条件为空时SQL就是这样的:select * from 表 where ' '=' ';所以就满足了多条件并且条件是不是为空未知查询的这种情况。

然后来说我的这个查询。title需要输入完整的数据;desc不需要完整的数据,模糊查询;courseId为0时是查询全部,不为0时时查询对应的课程id;creatId为0时是查询全部,不为0时时查询对应的创建者id;creadTime我们需要查的是时间是否在我们传入的这个时间区间内,传入的开始结束时间区间要存在则都存在,要不存在则都不存在。下面是我的查询方法片段:

/**

* 条件查询

*

* @param title

* @param desc

* @param courseId

* @param createId

* @param startTime

* @param endTime

* @return

*/

public List findByPara(String title, String desc, int courseId, int createId, String startTime,

String endTime) {

desc = "%" + desc + "%";

String sql = "select * from clazz cl where (cl.title=? or ?='')"

+ " and cl.`desc` like ?"

+ " and (cl.courseId=? or ?=0) "

+ "and (cl.createId=? or ?=0) "

+ "and (cl.createTime between ? and ? or ?='')";

return dao.find(sql, title, title, desc, courseId, courseId, createId, createId, startTime, endTime,

startTime);

}

这样做就不会像之前那样,方法庞大还容易出错。

写下来自己可以看看,亦希望能帮到大家!!!

mysql null 查询条件_MySql当查询条件为空时不作为条件查询相关推荐

  1. mysql join 条件_MySQL Join 竟然可以这么玩?根据条件 进行复制

    大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 今天给大家带来, 根据条件进行复制的案例 with t1 as ( select 1 seq ,'AK' id ,'A' type ,'g1' ...

  2. mysql null 排前面_Mysql实现null值排在最前/最后的方法示例

    前言 我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. 为了处理这种情况,MyS ...

  3. mysql null 走索引_mysql 索引列为Null的走不走索引及null在统计时的问题

    要尽可能地把字段定义为 NOT NULL,即使应用程序无须保存 NULL(没有值),也有许多表包含了可空列(Nullable Column) 这仅仅是因为它为默认选项.除非真的要保存 NULL,否则就 ...

  4. mysql null的作用_MySQL中对于NULL值的理解和使用教程

    NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串''的一样的东西.不是这样的!例如,下列语句是完全不同的: ?12mysql>INSERT INTO my ...

  5. mysql函数做条件_MySQL语句优化(三):避免条件字段做函数操作

    今天跟各位分享一个生产环境慢查询的例子,是一个比较典型的"条件字段使用了函数导致无法走索引"的例子. 一.定位慢查询 首先发现慢查询告警,通过运维平台看到慢查询主要是下面这条:SE ...

  6. 怎么做mysql查询系统_mysql数据库系统学习(一)---一条SQL查询语句是如何执行的?...

    一.第一节:一条sql查询语句是怎样执行的 5.5.5版本以后,默认使用存储引擎为InnoDB 不使用查询缓存,MySQL8.0没有查询缓存这个功能 总体来说:MySQL分为service层和存储引擎 ...

  7. mysql临时关闭查询日志_mysql故障排错临时打开通用日志和慢查询日志

    有时候你遇到sql 执行报错,有的是语法错误很好判断,但有的是sql本身写的没有问题,就是在执行的时候报错,有的sql很复杂你根本就不知道具体的哪一个地方报错,这个时候你可以把复杂的sql分解去确定报 ...

  8. mysql复购率_MYSQL系列(5) 电商常用指标查询

    表:order ,字段:orderid, userid, isPaid, price, paidTime 表:user,字段: userid, sex, birth 1.统计不同月份下单人数 sele ...

  9. mysql字段中有问号_Mysql数据库,表中有中文时,select出来好多问号(?)的解决方法...

    首先,我用的是zip包的Mysql,直接解压使用的,网上说修改my.ini或者my.cnf在我机器上根本就找不到.但是my.ini这个东西是可以自己添加的.将mysql目录中的my-default.i ...

最新文章

  1. Q-learning
  2. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息]
  3. 窥探SnowflakeIdWorker之并发生成唯一ID
  4. 服务器虚拟多台linux,VirtualBox环境下基于多台Ubuntu虚拟机的Hadoop分布式计算环境搭建...
  5. java高级mysql面试题_Java高级面试题
  6. linux操作指令及根目录介绍
  7. linux 命令 语法,linux常用命令及语法
  8. Ubuntu16.04实现Sphinx离线语音识别
  9. Leetcode每日一题:767.reorganize-string(重构字符串)
  10. 2021-08-30二叉树后向遍历 leetcode 栈
  11. 外网访问群晖设置ddns教程
  12. 怎么把一张暗的照片调亮_美图秀秀教你批量将偏暗的照片提亮
  13. python中交集并集用什么符号表示_python交集和补集的符号_python数组并集交集补集...
  14. 当前linux的ks文件,高手请进!请教linux自动安装文件ks.cfg
  15. SQL2000无法安装,提示挂起
  16. abaqus python实例_abaqus Python实例-操作excel文件
  17. python数据分析与展示--图像的手绘效果
  18. excel数据分析实战——销售额目标达成分析
  19. h5页面跳转到微信小程序之利用URL Scheme接口
  20. intptr_t详解

热门文章

  1. Anaconda中如何查看已经安装的包
  2. Altium AD20更改原理图栅格改为点栅格
  3. 【JVM】浅谈对OOM的认识
  4. stderr和stdout详细解说
  5. python中自定义超时异常的几种方法
  6. Oracle的分区表
  7. bzoj3007 解救小云公主
  8. Linux服务器开发初步
  9. UI基础--UIStepper步进器
  10. Xcode7 Xcode6 中添加pch文件