在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:
select(select xx from xx where 条件一) as 结果一, select(select xx from xx where 条件二) as 结果二, select(select xx from xx where 条件三) as 结果三 这个时候我们需要在一条sql将这三个结果查出来,可以使用UNION和UNION ALL UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行 也就是我们可以拼成一个表,比如现在有这么一个表: 如果我们需要分别查出年龄小于18和大于18的人数,由于查询条件不一样,所以需要用到两个查询 SELECT COUNT(*) user WHERE age <18; SELECT COUNT(*) user WHERE age >= 18; 使用UNION: SELECT SELECT COUNT(*) user WHERE age <18 UNION SELECT COUNT(*) user WHERE age >= 18 但是查出来的结果是在一列里面,无法得知哪个是18以下的 我们可以拼接一个0使其为两个字段,这里注意两条子查询的别名都要一样 SELECT SELECT COUNT(*) AS '18以下人数',0 AS '18以上人数' user WHERE age <18 UNION SELECT 0 AS '18以下人数',COUNT(*) AS '18以上人数' user WHERE age >= 18 这个时候是两条记录,分别使用SUM得到总数就可以变成一条记录了 2. 查询条件一样,返回多个结果整合 但是有时候, 几个结果的条件是一样的, 但是子查询只能返回一个结果, 也就是我们需要分成多个子查询来查询相同的条件 select(select xx from xx where 条件一) as 结果一, select(select xx from xx where 条件一) as 结果二, select(select xx from xx where 条件一) as 结果三, select(select xx from xx where 条件二) as 结果四 在网上搜罗一圈后, 有一个解决办法挺新颖的, 大概就是先把同样条件的多个结果, 先拼接成一个, 再在外面进行拆分, 在java里面比如是"aa,bb,cc".split(",") select SUBSTRING_INDEX(temp.结果一,',',1) as 第一列数据, SUBSTRING_INDEX(SUBSTRING_INDEX(temp.结果一,','2),',',-1) as 第二列数据, SUBSTRING_INDEX(temp.结果一,','-1) as 第三列数据, temp.结果二 as 第四列数据 FROM( select(select concat_ws(',',数据一, 数据二,数据三) from xx where 条件一) as 结果一, select(select xx from xx where 条件二) as 结果二 )temp [补充]关于substring_index的用法 SUBSTRING_INDEX('待切割的字符串', '截取分割的字符,比如逗号' , 长度) 长度为负数,从右边开始, 比如"a,b,c,d", 长度为-1取得是"d"取a: SUBSTRING_INDEX("a,b,c,d" , "," , 1)取b: SUBSTRING_INDEX(SUBSTRING_INDEX("a,b,c,d" , "," , 2) ,",",-1) 先拿到前2位,再取最后一位取d: SUBSTRING_INDEX("a,b,c,d" , "," , -1)取cd: SUBSTRING_INDEX("a,b,c,d" , "," , -2) demo: SELECT SUBSTRING_INDEX(temp.today, ",", 1) AS `今日加购量`, SUBSTRING_INDEX(temp.today, "," ,- 1) AS `今日加购商家数` SELECT CONCAT_WS( COUNT(*), COUNT(DISTINCT c.MALL_STORE_ID) ) AS today mall_goods_cart c WHERE STR_TO_DATE(c.CREATE_TIME, '%Y-%m-%d') = CURDATE() ) AS temp 问题在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:select(select xx from xx where 条件一) as 结果一,select(select xx from xx where 条件二) as 结果二,select(select xx from... mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的. 1首先我们了解上述相关使用场景之后,结合相关如下相关示例 单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段 2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果 最终需要的数据 执行的SQL如下 SELECT template.temple Mysql select 中的子查询返回多个字段 我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。 不费话,真接上代码 set @a:=null; set @b:=null; SELECT (SELECT CONCAT(@... SELECT SUM(t1.shangBao) AS '上报', SUM(t1.shouLi) AS '受理', SUM(t1.feiZhi) AS '废止', SUM(t1.banJie) AS '办结' FROM ( SELEC.. 简单的功能自己也没有注意测,提交给测试,第二天就发生产了,已经一周过去了,测试今天回归才发现,在点击页签是发现两条数据相同,通过条件帅选,只选择一条数据,问我是不是点击查询的时候 是否做过处理,我不确定重新看下代码,在sit环境也亲自测了下,没有做处理。 一:拿着查询条件到数据库去查,数据库是一条数据,但是界面查询出来两条数据 二:跟测试说大概是前端分页插件的问题,sql不会有问题 (自信还是有的) 分析问题: 1:先排查服务端给前端数据是否就有重复 2:服务... 熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低. 利用pac4j的封装,实现自定义cas校验ST、集成jwt zzzgd816: redis记录了token,退出登录就删除token, 同时调用cas的登出方法 利用pac4j的封装,实现自定义cas校验ST、集成jwt JAVA界小学僧: 博主你好,前后端分离cas+shiro+jwt的项目你们退出登录的逻辑是什么? Mysql分组给字段设置序号进行排序 shay56: 这段代码是对的嘛兄弟
select(select xx from xx where 条件一) as 结果一, select(select xx from xx where 条件二) as 结果二, select(select xx from xx where 条件三) as 结果三 这个时候我们需要在一条sql将这三个结果查出来,可以使用UNION和UNION ALL UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行 也就是我们可以拼成一个表,比如现在有这么一个表: 如果我们需要分别查出年龄小于18和大于18的人数,由于查询条件不一样,所以需要用到两个查询
这个时候我们需要在一条sql将这三个结果查出来,可以使用UNION和UNION ALL
UNION
UNION ALL
UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行
也就是我们可以拼成一个表,比如现在有这么一个表:
如果我们需要分别查出年龄小于18和大于18的人数,由于查询条件不一样,所以需要用到两个查询
SELECT COUNT(*) user WHERE age <18; SELECT COUNT(*) user WHERE age >= 18; 使用UNION: SELECT SELECT COUNT(*) user WHERE age <18 UNION SELECT COUNT(*) user WHERE age >= 18 但是查出来的结果是在一列里面,无法得知哪个是18以下的 我们可以拼接一个0使其为两个字段,这里注意两条子查询的别名都要一样 SELECT SELECT COUNT(*) AS '18以下人数',0 AS '18以上人数' user WHERE age <18 UNION SELECT 0 AS '18以下人数',COUNT(*) AS '18以上人数' user WHERE age >= 18 这个时候是两条记录,分别使用SUM得到总数就可以变成一条记录了 2. 查询条件一样,返回多个结果整合 但是有时候, 几个结果的条件是一样的, 但是子查询只能返回一个结果, 也就是我们需要分成多个子查询来查询相同的条件 select(select xx from xx where 条件一) as 结果一, select(select xx from xx where 条件一) as 结果二, select(select xx from xx where 条件一) as 结果三, select(select xx from xx where 条件二) as 结果四 在网上搜罗一圈后, 有一个解决办法挺新颖的, 大概就是先把同样条件的多个结果, 先拼接成一个, 再在外面进行拆分, 在java里面比如是"aa,bb,cc".split(",") select SUBSTRING_INDEX(temp.结果一,',',1) as 第一列数据, SUBSTRING_INDEX(SUBSTRING_INDEX(temp.结果一,','2),',',-1) as 第二列数据, SUBSTRING_INDEX(temp.结果一,','-1) as 第三列数据, temp.结果二 as 第四列数据 FROM( select(select concat_ws(',',数据一, 数据二,数据三) from xx where 条件一) as 结果一, select(select xx from xx where 条件二) as 结果二 )temp [补充]关于substring_index的用法 SUBSTRING_INDEX('待切割的字符串', '截取分割的字符,比如逗号' , 长度) 长度为负数,从右边开始, 比如"a,b,c,d", 长度为-1取得是"d"取a: SUBSTRING_INDEX("a,b,c,d" , "," , 1)取b: SUBSTRING_INDEX(SUBSTRING_INDEX("a,b,c,d" , "," , 2) ,",",-1) 先拿到前2位,再取最后一位取d: SUBSTRING_INDEX("a,b,c,d" , "," , -1)取cd: SUBSTRING_INDEX("a,b,c,d" , "," , -2) demo: SELECT SUBSTRING_INDEX(temp.today, ",", 1) AS `今日加购量`, SUBSTRING_INDEX(temp.today, "," ,- 1) AS `今日加购商家数` SELECT CONCAT_WS( COUNT(*), COUNT(DISTINCT c.MALL_STORE_ID) ) AS today mall_goods_cart c WHERE STR_TO_DATE(c.CREATE_TIME, '%Y-%m-%d') = CURDATE() ) AS temp 问题在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:select(select xx from xx where 条件一) as 结果一,select(select xx from xx where 条件二) as 结果二,select(select xx from... mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的. 1首先我们了解上述相关使用场景之后,结合相关如下相关示例 单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段 2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果 最终需要的数据 执行的SQL如下 SELECT template.temple Mysql select 中的子查询返回多个字段 我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。 不费话,真接上代码 set @a:=null; set @b:=null; SELECT (SELECT CONCAT(@... SELECT SUM(t1.shangBao) AS '上报', SUM(t1.shouLi) AS '受理', SUM(t1.feiZhi) AS '废止', SUM(t1.banJie) AS '办结' FROM ( SELEC.. 简单的功能自己也没有注意测,提交给测试,第二天就发生产了,已经一周过去了,测试今天回归才发现,在点击页签是发现两条数据相同,通过条件帅选,只选择一条数据,问我是不是点击查询的时候 是否做过处理,我不确定重新看下代码,在sit环境也亲自测了下,没有做处理。 一:拿着查询条件到数据库去查,数据库是一条数据,但是界面查询出来两条数据 二:跟测试说大概是前端分页插件的问题,sql不会有问题 (自信还是有的) 分析问题: 1:先排查服务端给前端数据是否就有重复 2:服务... 熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低. 利用pac4j的封装,实现自定义cas校验ST、集成jwt zzzgd816: redis记录了token,退出登录就删除token, 同时调用cas的登出方法 利用pac4j的封装,实现自定义cas校验ST、集成jwt JAVA界小学僧: 博主你好,前后端分离cas+shiro+jwt的项目你们退出登录的逻辑是什么? Mysql分组给字段设置序号进行排序 shay56: 这段代码是对的嘛兄弟
SELECT COUNT(*) user WHERE age <18; SELECT COUNT(*) user WHERE age >= 18; 使用UNION:
使用UNION:
SELECT SELECT COUNT(*) user WHERE age <18 UNION SELECT COUNT(*) user WHERE age >= 18 但是查出来的结果是在一列里面,无法得知哪个是18以下的 我们可以拼接一个0使其为两个字段,这里注意两条子查询的别名都要一样 SELECT SELECT COUNT(*) AS '18以下人数',0 AS '18以上人数' user WHERE age <18 UNION SELECT 0 AS '18以下人数',COUNT(*) AS '18以上人数' user WHERE age >= 18 这个时候是两条记录,分别使用SUM得到总数就可以变成一条记录了 2. 查询条件一样,返回多个结果整合 但是有时候, 几个结果的条件是一样的, 但是子查询只能返回一个结果, 也就是我们需要分成多个子查询来查询相同的条件 select(select xx from xx where 条件一) as 结果一, select(select xx from xx where 条件一) as 结果二, select(select xx from xx where 条件一) as 结果三, select(select xx from xx where 条件二) as 结果四 在网上搜罗一圈后, 有一个解决办法挺新颖的, 大概就是先把同样条件的多个结果, 先拼接成一个, 再在外面进行拆分, 在java里面比如是"aa,bb,cc".split(",") select SUBSTRING_INDEX(temp.结果一,',',1) as 第一列数据, SUBSTRING_INDEX(SUBSTRING_INDEX(temp.结果一,','2),',',-1) as 第二列数据, SUBSTRING_INDEX(temp.结果一,','-1) as 第三列数据, temp.结果二 as 第四列数据 FROM( select(select concat_ws(',',数据一, 数据二,数据三) from xx where 条件一) as 结果一, select(select xx from xx where 条件二) as 结果二 )temp [补充]关于substring_index的用法 SUBSTRING_INDEX('待切割的字符串', '截取分割的字符,比如逗号' , 长度) 长度为负数,从右边开始, 比如"a,b,c,d", 长度为-1取得是"d"取a: SUBSTRING_INDEX("a,b,c,d" , "," , 1)取b: SUBSTRING_INDEX(SUBSTRING_INDEX("a,b,c,d" , "," , 2) ,",",-1) 先拿到前2位,再取最后一位取d: SUBSTRING_INDEX("a,b,c,d" , "," , -1)取cd: SUBSTRING_INDEX("a,b,c,d" , "," , -2) demo: SELECT SUBSTRING_INDEX(temp.today, ",", 1) AS `今日加购量`, SUBSTRING_INDEX(temp.today, "," ,- 1) AS `今日加购商家数` SELECT CONCAT_WS( COUNT(*), COUNT(DISTINCT c.MALL_STORE_ID) ) AS today mall_goods_cart c WHERE STR_TO_DATE(c.CREATE_TIME, '%Y-%m-%d') = CURDATE() ) AS temp 问题在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:select(select xx from xx where 条件一) as 结果一,select(select xx from xx where 条件二) as 结果二,select(select xx from... mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的. 1首先我们了解上述相关使用场景之后,结合相关如下相关示例 单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段 2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果 最终需要的数据 执行的SQL如下 SELECT template.temple Mysql select 中的子查询返回多个字段 我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。 不费话,真接上代码 set @a:=null; set @b:=null; SELECT (SELECT CONCAT(@... SELECT SUM(t1.shangBao) AS '上报', SUM(t1.shouLi) AS '受理', SUM(t1.feiZhi) AS '废止', SUM(t1.banJie) AS '办结' FROM ( SELEC.. 简单的功能自己也没有注意测,提交给测试,第二天就发生产了,已经一周过去了,测试今天回归才发现,在点击页签是发现两条数据相同,通过条件帅选,只选择一条数据,问我是不是点击查询的时候 是否做过处理,我不确定重新看下代码,在sit环境也亲自测了下,没有做处理。 一:拿着查询条件到数据库去查,数据库是一条数据,但是界面查询出来两条数据 二:跟测试说大概是前端分页插件的问题,sql不会有问题 (自信还是有的) 分析问题: 1:先排查服务端给前端数据是否就有重复 2:服务... 熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低. 利用pac4j的封装,实现自定义cas校验ST、集成jwt zzzgd816: redis记录了token,退出登录就删除token, 同时调用cas的登出方法 利用pac4j的封装,实现自定义cas校验ST、集成jwt JAVA界小学僧: 博主你好,前后端分离cas+shiro+jwt的项目你们退出登录的逻辑是什么? Mysql分组给字段设置序号进行排序 shay56: 这段代码是对的嘛兄弟
SELECT SELECT COUNT(*) user WHERE age <18 UNION SELECT COUNT(*) user WHERE age >= 18 但是查出来的结果是在一列里面,无法得知哪个是18以下的 我们可以拼接一个0使其为两个字段,这里注意两条子查询的别名都要一样
但是查出来的结果是在一列里面,无法得知哪个是18以下的 我们可以拼接一个0使其为两个字段,这里注意两条子查询的别名都要一样
SELECT SELECT COUNT(*) AS '18以下人数',0 AS '18以上人数' user WHERE age <18 UNION SELECT 0 AS '18以下人数',COUNT(*) AS '18以上人数' user WHERE age >= 18 这个时候是两条记录,分别使用SUM得到总数就可以变成一条记录了 2. 查询条件一样,返回多个结果整合 但是有时候, 几个结果的条件是一样的, 但是子查询只能返回一个结果, 也就是我们需要分成多个子查询来查询相同的条件 select(select xx from xx where 条件一) as 结果一, select(select xx from xx where 条件一) as 结果二, select(select xx from xx where 条件一) as 结果三, select(select xx from xx where 条件二) as 结果四 在网上搜罗一圈后, 有一个解决办法挺新颖的, 大概就是先把同样条件的多个结果, 先拼接成一个, 再在外面进行拆分, 在java里面比如是"aa,bb,cc".split(",") select SUBSTRING_INDEX(temp.结果一,',',1) as 第一列数据, SUBSTRING_INDEX(SUBSTRING_INDEX(temp.结果一,','2),',',-1) as 第二列数据, SUBSTRING_INDEX(temp.结果一,','-1) as 第三列数据, temp.结果二 as 第四列数据 FROM( select(select concat_ws(',',数据一, 数据二,数据三) from xx where 条件一) as 结果一, select(select xx from xx where 条件二) as 结果二 )temp [补充]关于substring_index的用法 SUBSTRING_INDEX('待切割的字符串', '截取分割的字符,比如逗号' , 长度) 长度为负数,从右边开始, 比如"a,b,c,d", 长度为-1取得是"d"取a: SUBSTRING_INDEX("a,b,c,d" , "," , 1)取b: SUBSTRING_INDEX(SUBSTRING_INDEX("a,b,c,d" , "," , 2) ,",",-1) 先拿到前2位,再取最后一位取d: SUBSTRING_INDEX("a,b,c,d" , "," , -1)取cd: SUBSTRING_INDEX("a,b,c,d" , "," , -2) demo: SELECT SUBSTRING_INDEX(temp.today, ",", 1) AS `今日加购量`, SUBSTRING_INDEX(temp.today, "," ,- 1) AS `今日加购商家数` SELECT CONCAT_WS( COUNT(*), COUNT(DISTINCT c.MALL_STORE_ID) ) AS today mall_goods_cart c WHERE STR_TO_DATE(c.CREATE_TIME, '%Y-%m-%d') = CURDATE() ) AS temp 问题在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:select(select xx from xx where 条件一) as 结果一,select(select xx from xx where 条件二) as 结果二,select(select xx from... mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的. 1首先我们了解上述相关使用场景之后,结合相关如下相关示例 单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段 2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果 最终需要的数据 执行的SQL如下 SELECT template.temple Mysql select 中的子查询返回多个字段 我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。 不费话,真接上代码 set @a:=null; set @b:=null; SELECT (SELECT CONCAT(@... SELECT SUM(t1.shangBao) AS '上报', SUM(t1.shouLi) AS '受理', SUM(t1.feiZhi) AS '废止', SUM(t1.banJie) AS '办结' FROM ( SELEC.. 简单的功能自己也没有注意测,提交给测试,第二天就发生产了,已经一周过去了,测试今天回归才发现,在点击页签是发现两条数据相同,通过条件帅选,只选择一条数据,问我是不是点击查询的时候 是否做过处理,我不确定重新看下代码,在sit环境也亲自测了下,没有做处理。 一:拿着查询条件到数据库去查,数据库是一条数据,但是界面查询出来两条数据 二:跟测试说大概是前端分页插件的问题,sql不会有问题 (自信还是有的) 分析问题: 1:先排查服务端给前端数据是否就有重复 2:服务... 熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低. 利用pac4j的封装,实现自定义cas校验ST、集成jwt zzzgd816: redis记录了token,退出登录就删除token, 同时调用cas的登出方法 利用pac4j的封装,实现自定义cas校验ST、集成jwt JAVA界小学僧: 博主你好,前后端分离cas+shiro+jwt的项目你们退出登录的逻辑是什么? Mysql分组给字段设置序号进行排序 shay56: 这段代码是对的嘛兄弟
SELECT SELECT COUNT(*) AS '18以下人数',0 AS '18以上人数' user WHERE age <18 UNION SELECT 0 AS '18以下人数',COUNT(*) AS '18以上人数' user WHERE age >= 18 这个时候是两条记录,分别使用SUM得到总数就可以变成一条记录了
这个时候是两条记录,分别使用SUM得到总数就可以变成一条记录了
SUM
2. 查询条件一样,返回多个结果整合 但是有时候, 几个结果的条件是一样的, 但是子查询只能返回一个结果, 也就是我们需要分成多个子查询来查询相同的条件 select(select xx from xx where 条件一) as 结果一, select(select xx from xx where 条件一) as 结果二, select(select xx from xx where 条件一) as 结果三, select(select xx from xx where 条件二) as 结果四 在网上搜罗一圈后, 有一个解决办法挺新颖的, 大概就是先把同样条件的多个结果, 先拼接成一个, 再在外面进行拆分, 在java里面比如是"aa,bb,cc".split(",") select SUBSTRING_INDEX(temp.结果一,',',1) as 第一列数据, SUBSTRING_INDEX(SUBSTRING_INDEX(temp.结果一,','2),',',-1) as 第二列数据, SUBSTRING_INDEX(temp.结果一,','-1) as 第三列数据, temp.结果二 as 第四列数据 FROM( select(select concat_ws(',',数据一, 数据二,数据三) from xx where 条件一) as 结果一, select(select xx from xx where 条件二) as 结果二 )temp [补充]关于substring_index的用法 SUBSTRING_INDEX('待切割的字符串', '截取分割的字符,比如逗号' , 长度) 长度为负数,从右边开始, 比如"a,b,c,d", 长度为-1取得是"d"取a: SUBSTRING_INDEX("a,b,c,d" , "," , 1)取b: SUBSTRING_INDEX(SUBSTRING_INDEX("a,b,c,d" , "," , 2) ,",",-1) 先拿到前2位,再取最后一位取d: SUBSTRING_INDEX("a,b,c,d" , "," , -1)取cd: SUBSTRING_INDEX("a,b,c,d" , "," , -2) demo: SELECT SUBSTRING_INDEX(temp.today, ",", 1) AS `今日加购量`, SUBSTRING_INDEX(temp.today, "," ,- 1) AS `今日加购商家数` SELECT CONCAT_WS( COUNT(*), COUNT(DISTINCT c.MALL_STORE_ID) ) AS today mall_goods_cart c WHERE STR_TO_DATE(c.CREATE_TIME, '%Y-%m-%d') = CURDATE() ) AS temp 问题在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:select(select xx from xx where 条件一) as 结果一,select(select xx from xx where 条件二) as 结果二,select(select xx from... mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的. 1首先我们了解上述相关使用场景之后,结合相关如下相关示例 单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段 2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果 最终需要的数据 执行的SQL如下 SELECT template.temple Mysql select 中的子查询返回多个字段 我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。 不费话,真接上代码 set @a:=null; set @b:=null; SELECT (SELECT CONCAT(@... SELECT SUM(t1.shangBao) AS '上报', SUM(t1.shouLi) AS '受理', SUM(t1.feiZhi) AS '废止', SUM(t1.banJie) AS '办结' FROM ( SELEC.. 简单的功能自己也没有注意测,提交给测试,第二天就发生产了,已经一周过去了,测试今天回归才发现,在点击页签是发现两条数据相同,通过条件帅选,只选择一条数据,问我是不是点击查询的时候 是否做过处理,我不确定重新看下代码,在sit环境也亲自测了下,没有做处理。 一:拿着查询条件到数据库去查,数据库是一条数据,但是界面查询出来两条数据 二:跟测试说大概是前端分页插件的问题,sql不会有问题 (自信还是有的) 分析问题: 1:先排查服务端给前端数据是否就有重复 2:服务... 熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低. 利用pac4j的封装,实现自定义cas校验ST、集成jwt zzzgd816: redis记录了token,退出登录就删除token, 同时调用cas的登出方法 利用pac4j的封装,实现自定义cas校验ST、集成jwt JAVA界小学僧: 博主你好,前后端分离cas+shiro+jwt的项目你们退出登录的逻辑是什么? Mysql分组给字段设置序号进行排序 shay56: 这段代码是对的嘛兄弟
但是有时候, 几个结果的条件是一样的, 但是子查询只能返回一个结果, 也就是我们需要分成多个子查询来查询相同的条件
select(select xx from xx where 条件一) as 结果一, select(select xx from xx where 条件一) as 结果二, select(select xx from xx where 条件一) as 结果三, select(select xx from xx where 条件二) as 结果四 在网上搜罗一圈后, 有一个解决办法挺新颖的, 大概就是先把同样条件的多个结果, 先拼接成一个, 再在外面进行拆分, 在java里面比如是"aa,bb,cc".split(",") select SUBSTRING_INDEX(temp.结果一,',',1) as 第一列数据, SUBSTRING_INDEX(SUBSTRING_INDEX(temp.结果一,','2),',',-1) as 第二列数据, SUBSTRING_INDEX(temp.结果一,','-1) as 第三列数据, temp.结果二 as 第四列数据 FROM( select(select concat_ws(',',数据一, 数据二,数据三) from xx where 条件一) as 结果一, select(select xx from xx where 条件二) as 结果二 )temp [补充]关于substring_index的用法 SUBSTRING_INDEX('待切割的字符串', '截取分割的字符,比如逗号' , 长度) 长度为负数,从右边开始, 比如"a,b,c,d", 长度为-1取得是"d"取a: SUBSTRING_INDEX("a,b,c,d" , "," , 1)取b: SUBSTRING_INDEX(SUBSTRING_INDEX("a,b,c,d" , "," , 2) ,",",-1) 先拿到前2位,再取最后一位取d: SUBSTRING_INDEX("a,b,c,d" , "," , -1)取cd: SUBSTRING_INDEX("a,b,c,d" , "," , -2) demo: SELECT SUBSTRING_INDEX(temp.today, ",", 1) AS `今日加购量`, SUBSTRING_INDEX(temp.today, "," ,- 1) AS `今日加购商家数` SELECT CONCAT_WS( COUNT(*), COUNT(DISTINCT c.MALL_STORE_ID) ) AS today mall_goods_cart c WHERE STR_TO_DATE(c.CREATE_TIME, '%Y-%m-%d') = CURDATE() ) AS temp 问题在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:select(select xx from xx where 条件一) as 结果一,select(select xx from xx where 条件二) as 结果二,select(select xx from... mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的. 1首先我们了解上述相关使用场景之后,结合相关如下相关示例 单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段 2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果 最终需要的数据 执行的SQL如下 SELECT template.temple Mysql select 中的子查询返回多个字段 我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。 不费话,真接上代码 set @a:=null; set @b:=null; SELECT (SELECT CONCAT(@... SELECT SUM(t1.shangBao) AS '上报', SUM(t1.shouLi) AS '受理', SUM(t1.feiZhi) AS '废止', SUM(t1.banJie) AS '办结' FROM ( SELEC.. 简单的功能自己也没有注意测,提交给测试,第二天就发生产了,已经一周过去了,测试今天回归才发现,在点击页签是发现两条数据相同,通过条件帅选,只选择一条数据,问我是不是点击查询的时候 是否做过处理,我不确定重新看下代码,在sit环境也亲自测了下,没有做处理。 一:拿着查询条件到数据库去查,数据库是一条数据,但是界面查询出来两条数据 二:跟测试说大概是前端分页插件的问题,sql不会有问题 (自信还是有的) 分析问题: 1:先排查服务端给前端数据是否就有重复 2:服务... 熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低. 利用pac4j的封装,实现自定义cas校验ST、集成jwt zzzgd816: redis记录了token,退出登录就删除token, 同时调用cas的登出方法 利用pac4j的封装,实现自定义cas校验ST、集成jwt JAVA界小学僧: 博主你好,前后端分离cas+shiro+jwt的项目你们退出登录的逻辑是什么? Mysql分组给字段设置序号进行排序 shay56: 这段代码是对的嘛兄弟
select(select xx from xx where 条件一) as 结果一, select(select xx from xx where 条件一) as 结果二, select(select xx from xx where 条件一) as 结果三, select(select xx from xx where 条件二) as 结果四 在网上搜罗一圈后, 有一个解决办法挺新颖的, 大概就是先把同样条件的多个结果, 先拼接成一个, 再在外面进行拆分, 在java里面比如是"aa,bb,cc".split(",")
在网上搜罗一圈后, 有一个解决办法挺新颖的, 大概就是先把同样条件的多个结果, 先拼接成一个, 再在外面进行拆分, 在java里面比如是"aa,bb,cc".split(",")
"aa,bb,cc".split(",")
select SUBSTRING_INDEX(temp.结果一,',',1) as 第一列数据, SUBSTRING_INDEX(SUBSTRING_INDEX(temp.结果一,','2),',',-1) as 第二列数据, SUBSTRING_INDEX(temp.结果一,','-1) as 第三列数据, temp.结果二 as 第四列数据 FROM( select(select concat_ws(',',数据一, 数据二,数据三) from xx where 条件一) as 结果一, select(select xx from xx where 条件二) as 结果二 )temp [补充]关于substring_index的用法 SUBSTRING_INDEX('待切割的字符串', '截取分割的字符,比如逗号' , 长度) 长度为负数,从右边开始, 比如"a,b,c,d", 长度为-1取得是"d"取a: SUBSTRING_INDEX("a,b,c,d" , "," , 1)取b: SUBSTRING_INDEX(SUBSTRING_INDEX("a,b,c,d" , "," , 2) ,",",-1) 先拿到前2位,再取最后一位取d: SUBSTRING_INDEX("a,b,c,d" , "," , -1)取cd: SUBSTRING_INDEX("a,b,c,d" , "," , -2) demo: SELECT SUBSTRING_INDEX(temp.today, ",", 1) AS `今日加购量`, SUBSTRING_INDEX(temp.today, "," ,- 1) AS `今日加购商家数` SELECT CONCAT_WS( COUNT(*), COUNT(DISTINCT c.MALL_STORE_ID) ) AS today mall_goods_cart c WHERE STR_TO_DATE(c.CREATE_TIME, '%Y-%m-%d') = CURDATE() ) AS temp 问题在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:select(select xx from xx where 条件一) as 结果一,select(select xx from xx where 条件二) as 结果二,select(select xx from... mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的. 1首先我们了解上述相关使用场景之后,结合相关如下相关示例 单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段 2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果 最终需要的数据 执行的SQL如下 SELECT template.temple Mysql select 中的子查询返回多个字段 我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。 不费话,真接上代码 set @a:=null; set @b:=null; SELECT (SELECT CONCAT(@... SELECT SUM(t1.shangBao) AS '上报', SUM(t1.shouLi) AS '受理', SUM(t1.feiZhi) AS '废止', SUM(t1.banJie) AS '办结' FROM ( SELEC.. 简单的功能自己也没有注意测,提交给测试,第二天就发生产了,已经一周过去了,测试今天回归才发现,在点击页签是发现两条数据相同,通过条件帅选,只选择一条数据,问我是不是点击查询的时候 是否做过处理,我不确定重新看下代码,在sit环境也亲自测了下,没有做处理。 一:拿着查询条件到数据库去查,数据库是一条数据,但是界面查询出来两条数据 二:跟测试说大概是前端分页插件的问题,sql不会有问题 (自信还是有的) 分析问题: 1:先排查服务端给前端数据是否就有重复 2:服务... 熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低. 利用pac4j的封装,实现自定义cas校验ST、集成jwt zzzgd816: redis记录了token,退出登录就删除token, 同时调用cas的登出方法 利用pac4j的封装,实现自定义cas校验ST、集成jwt JAVA界小学僧: 博主你好,前后端分离cas+shiro+jwt的项目你们退出登录的逻辑是什么? Mysql分组给字段设置序号进行排序 shay56: 这段代码是对的嘛兄弟
select SUBSTRING_INDEX(temp.结果一,',',1) as 第一列数据, SUBSTRING_INDEX(SUBSTRING_INDEX(temp.结果一,','2),',',-1) as 第二列数据, SUBSTRING_INDEX(temp.结果一,','-1) as 第三列数据, temp.结果二 as 第四列数据 FROM( select(select concat_ws(',',数据一, 数据二,数据三) from xx where 条件一) as 结果一, select(select xx from xx where 条件二) as 结果二 )temp
[补充]关于substring_index的用法 SUBSTRING_INDEX('待切割的字符串', '截取分割的字符,比如逗号' , 长度) 长度为负数,从右边开始, 比如"a,b,c,d", 长度为-1取得是"d"取a: SUBSTRING_INDEX("a,b,c,d" , "," , 1)取b: SUBSTRING_INDEX(SUBSTRING_INDEX("a,b,c,d" , "," , 2) ,",",-1) 先拿到前2位,再取最后一位取d: SUBSTRING_INDEX("a,b,c,d" , "," , -1)取cd: SUBSTRING_INDEX("a,b,c,d" , "," , -2) demo: SELECT SUBSTRING_INDEX(temp.today, ",", 1) AS `今日加购量`, SUBSTRING_INDEX(temp.today, "," ,- 1) AS `今日加购商家数` SELECT CONCAT_WS( COUNT(*), COUNT(DISTINCT c.MALL_STORE_ID) ) AS today mall_goods_cart c WHERE STR_TO_DATE(c.CREATE_TIME, '%Y-%m-%d') = CURDATE() ) AS temp 问题在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:select(select xx from xx where 条件一) as 结果一,select(select xx from xx where 条件二) as 结果二,select(select xx from... mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的. 1首先我们了解上述相关使用场景之后,结合相关如下相关示例 单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段 2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果 最终需要的数据 执行的SQL如下 SELECT template.temple Mysql select 中的子查询返回多个字段 我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。 不费话,真接上代码 set @a:=null; set @b:=null; SELECT (SELECT CONCAT(@... SELECT SUM(t1.shangBao) AS '上报', SUM(t1.shouLi) AS '受理', SUM(t1.feiZhi) AS '废止', SUM(t1.banJie) AS '办结' FROM ( SELEC.. 简单的功能自己也没有注意测,提交给测试,第二天就发生产了,已经一周过去了,测试今天回归才发现,在点击页签是发现两条数据相同,通过条件帅选,只选择一条数据,问我是不是点击查询的时候 是否做过处理,我不确定重新看下代码,在sit环境也亲自测了下,没有做处理。 一:拿着查询条件到数据库去查,数据库是一条数据,但是界面查询出来两条数据 二:跟测试说大概是前端分页插件的问题,sql不会有问题 (自信还是有的) 分析问题: 1:先排查服务端给前端数据是否就有重复 2:服务... 熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低. 利用pac4j的封装,实现自定义cas校验ST、集成jwt zzzgd816: redis记录了token,退出登录就删除token, 同时调用cas的登出方法 利用pac4j的封装,实现自定义cas校验ST、集成jwt JAVA界小学僧: 博主你好,前后端分离cas+shiro+jwt的项目你们退出登录的逻辑是什么? Mysql分组给字段设置序号进行排序 shay56: 这段代码是对的嘛兄弟
SUBSTRING_INDEX('待切割的字符串', '截取分割的字符,比如逗号' , 长度)
"a,b,c,d"
"d"
a
SUBSTRING_INDEX("a,b,c,d" , "," , 1)
b
SUBSTRING_INDEX(SUBSTRING_INDEX("a,b,c,d" , "," , 2) ,",",-1)
d
SUBSTRING_INDEX("a,b,c,d" , "," , -1)
cd
SUBSTRING_INDEX("a,b,c,d" , "," , -2)
SELECT SUBSTRING_INDEX(temp.today, ",", 1) AS `今日加购量`, SUBSTRING_INDEX(temp.today, "," ,- 1) AS `今日加购商家数` SELECT CONCAT_WS( COUNT(*), COUNT(DISTINCT c.MALL_STORE_ID) ) AS today mall_goods_cart c WHERE STR_TO_DATE(c.CREATE_TIME, '%Y-%m-%d') = CURDATE() ) AS temp 问题在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:select(select xx from xx where 条件一) as 结果一,select(select xx from xx where 条件二) as 结果二,select(select xx from... mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的. 1首先我们了解上述相关使用场景之后,结合相关如下相关示例 单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段 2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果 最终需要的数据 执行的SQL如下 SELECT template.temple Mysql select 中的子查询返回多个字段 我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。 不费话,真接上代码 set @a:=null; set @b:=null; SELECT (SELECT CONCAT(@... SELECT SUM(t1.shangBao) AS '上报', SUM(t1.shouLi) AS '受理', SUM(t1.feiZhi) AS '废止', SUM(t1.banJie) AS '办结' FROM ( SELEC.. 简单的功能自己也没有注意测,提交给测试,第二天就发生产了,已经一周过去了,测试今天回归才发现,在点击页签是发现两条数据相同,通过条件帅选,只选择一条数据,问我是不是点击查询的时候 是否做过处理,我不确定重新看下代码,在sit环境也亲自测了下,没有做处理。 一:拿着查询条件到数据库去查,数据库是一条数据,但是界面查询出来两条数据 二:跟测试说大概是前端分页插件的问题,sql不会有问题 (自信还是有的) 分析问题: 1:先排查服务端给前端数据是否就有重复 2:服务... 熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低. 利用pac4j的封装,实现自定义cas校验ST、集成jwt zzzgd816: redis记录了token,退出登录就删除token, 同时调用cas的登出方法 利用pac4j的封装,实现自定义cas校验ST、集成jwt JAVA界小学僧: 博主你好,前后端分离cas+shiro+jwt的项目你们退出登录的逻辑是什么? Mysql分组给字段设置序号进行排序 shay56: 这段代码是对的嘛兄弟
SELECT SUBSTRING_INDEX(temp.today, ",", 1) AS `今日加购量`, SUBSTRING_INDEX(temp.today, "," ,- 1) AS `今日加购商家数` SELECT CONCAT_WS( COUNT(*), COUNT(DISTINCT c.MALL_STORE_ID) ) AS today mall_goods_cart c WHERE STR_TO_DATE(c.CREATE_TIME, '%Y-%m-%d') = CURDATE() ) AS temp 问题在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:select(select xx from xx where 条件一) as 结果一,select(select xx from xx where 条件二) as 结果二,select(select xx from... mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的. 1首先我们了解上述相关使用场景之后,结合相关如下相关示例 单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段 2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果 最终需要的数据 执行的SQL如下 SELECT template.temple Mysql select 中的子查询返回多个字段 我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。 不费话,真接上代码 set @a:=null; set @b:=null; SELECT (SELECT CONCAT(@... SELECT SUM(t1.shangBao) AS '上报', SUM(t1.shouLi) AS '受理', SUM(t1.feiZhi) AS '废止', SUM(t1.banJie) AS '办结' FROM ( SELEC.. 简单的功能自己也没有注意测,提交给测试,第二天就发生产了,已经一周过去了,测试今天回归才发现,在点击页签是发现两条数据相同,通过条件帅选,只选择一条数据,问我是不是点击查询的时候 是否做过处理,我不确定重新看下代码,在sit环境也亲自测了下,没有做处理。 一:拿着查询条件到数据库去查,数据库是一条数据,但是界面查询出来两条数据 二:跟测试说大概是前端分页插件的问题,sql不会有问题 (自信还是有的) 分析问题: 1:先排查服务端给前端数据是否就有重复 2:服务...
熙熙攘攘H: http1.0没有复用tcp连接, 每次请求都会建立一个tcp连接, 请求完了就会断开连接. 若客户端使用http1.0访问, 服务端用BIO来处理并没有很大的效率问题. 因为客户端每次请求完就会断开tcp连接, 服务端给其分配的work线程会因客户端主动断开tcp连接而回收到线程池中, 并不会在那儿傻等着. 到了http1.1之后, 有了tcp连接复用, 客户端发送了一个http请求后是不会主动断开连接的. 只有持续60s没有任何http请求发出, client端才会主动断开tcp连接. 假设一个场景, 用户点击了一个页面(建立tcp连接), 加载完数据之后就开始浏览(这个时候没有再发请求了). 服务端如果使用的是bio, 那么在用户浏览网页的这段时间(没有发请求), 之前建立的连接占用的work线程迟迟没有回收掉. 而NIO就不一样, work线程只会去处理有http请求的连接, 而不是每个连接(无论有没有请求过来)都占用一个work线程. 结论 : tcp连接用完即断开的协议(如http1.0), 用bio效率并没有太大问题. 而需要tcp连接复用的协议, 用bio效率非常低. 利用pac4j的封装,实现自定义cas校验ST、集成jwt zzzgd816: redis记录了token,退出登录就删除token, 同时调用cas的登出方法 利用pac4j的封装,实现自定义cas校验ST、集成jwt JAVA界小学僧: 博主你好,前后端分离cas+shiro+jwt的项目你们退出登录的逻辑是什么? Mysql分组给字段设置序号进行排序 shay56: 这段代码是对的嘛兄弟