Mysql中Ifisnull()的使⽤
ifnull()⽅法的⽤法
⼀般我们在使⽤ifnull()⽅法的时候,都是类似下⾯的语句:
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回⼀个数字或字符串值。
isnull的用法
if和isnull结合使⽤
有的时候我们会⽤到下⾯的句⼦
IF(ISNULL(X),expr1,expr2)
这样,如果x为null,则返回expr1,如果x不为null,则返回expr2。
搜索时附加筛选条件
写⽹站的时候遇到了筛选功能,搜索出来的信息需要按照⽤户的要求筛选。⽐如搜索job的时候按照城市筛选。
⼀种⽅法是写两个sql,⼀个是有筛选功能,⼀个是没有筛选功能。
但是这样的话会遇到⼀个问题,如果添加筛选条件,⽐如公司,就需要2*2=4个sql,这样会爆炸增长
所以我⽤了if和isnull的结合
Mysql
表的结构:
语句和结果:不为null(有筛选城市的条件,只需要城市符合的数据)
SELECT*FROM jobcoming.job_exist t  where date(t.ddl)> curdate()and
t.cities like if(ISNUll('sh'),CONCAT('%','','%'),CONCAT('%','sh','%'))
为null(没有筛选城市的条件,查询所有数据)
SELECT*FROM jobcoming.job_exist t  where date(t.ddl)> curdate()and
t.cities like if(ISNUll(null),CONCAT('%','','%'),CONCAT('%','sh','%'))
JPA
//模糊查询按照最近ddl排序
@Query(value ="select * from job_exist t where ( t.title like CONCAT('%',?1,'%') or t.desribe like  CONCAT('%',?1,'%') "+ "or t.cities like CONCAT('%',?1,'%') or tpany_name like CONCAT('%',?1,'%')"+
"or t.keywords like CONCAT('%',?1,'%') )and t.ddl > curdate() and t.cities like if(ISNUll(?2),CONCAT('%','','%'),CONCAT('%',?2,'%'))"+ "ORDER BY t.ddl ",nativeQuery =true)
List<JobExist>searchjobNearDDL(@Param("searchtitle") String title,@Param("city") String city);
注意如果想要isnull()返回true时,参数city应为null,不是字符串"null"
给数据排序
Mysql
给topic的评论排序添加rank,我采⽤的是寻该topic下评论rank的最⼤值+1,但是这⾥的问题是如果该topic下没有评论那么max(rank)返回的是null,不是0。
表结构:
select max(`rank`)+1from user_c where topic_id=1
select max(`rank`)+1from user_c where topic_id=8
所以这⾥需要⽤到ifnull
select ifnull(max(`rank`)+1,1)from user_c where topic_id=8
或者⽤if isnull
select if(isnull(max(`rank`)),1,max(`rank`)+1)from user_c where topic_id=8
JPA
//添加评论
@Modifying
@Transactional//需要添加⼀个事务
@Query(value ="INSERT into user_c (`delete`,`topic_ID`, `topic_comments`, `user_ID`, `rank`,`comment_time`) "+
"VALUES (1,?1,?2,?3,(SELECT if(ISNULL(max(`a`.`rank`)),0,max(`a`.`rank`))+1 FROM `user_c` `a` where `a`.`topic_id`=?1),?4)",nativeQuery =tru e)
void addComment(Long topicid,String comments,Long userid,Date time);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。