现在有4张表:表一:jy_qualitytaskdet 细表,以此表为主表,查出符合要求的总数进行分组,用得到的字段create_date是时间,第一个条件,分别需要取2个月的数据,根据时间进行分组
,表二:jy_qualitytask 粗表,作为表关联的中转细表的jy_qtcode存的是粗表的id
,表三:t_s_base_user 成员表,保存了成员的信息,根据粗表中字段jobnum等于成员表中字段jobnum而中转进行关联,第二个条件,成员表中Iscorrect为是否转正,字段值即为‘是’与‘否’,根据这两个值进行分组
,表四:jy_qualityitem 内容表,该表的id为细表的jy_qticode字段,然而此表自身分父子ID(id与pid字段),大类id为001-005顺序排序,小类id从006开始到某个数字(目前是023),小类自身关联着大类,通过小类的pid存入大类的id实现,而细表中jy_qticode中只存入小类的id,但是最终结果要求根据小类所关联的大类ID进行大类的分组,即分为5组
,如下是我写的sql:
select count(a.id) num,d.pid xiangmu,c.Iscorrect yesor
from jy_qualitytaskdet a
LEFT JOIN jy_qualitytask b ON a.jy_qtcode = b.id
LEFT JOIN t_s_base_user c ON c.jobnum = b.jobnum
LEFT JOIN jy_qualityitem d ON d.id = a.jy_qticode
WHERE DATE_FORMAT( a.create_date, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
GROUP BY d.pid,c.Iscorrect;
最终结果是按照时间与是否分为4个数组,每个数组按照001-005分成5个元素
,但是有几个问题:
1.取出的数据需是按照001-005;是否;两个时间段进行分组的,那么应该是拥有20个数据类型,但是我将他们取到后台之后有可能会出现某个值为null的情况而导致全部数据乱序,应该怎样在sql语句中就进行判断使null值变为0,否则岂不是要写20个if语句;
2.排序,怎样排序成
001,是,第一个时间段
002,是,第一个时间段
003,是,第一个时间段
.....
001,否,第一个时间段
002,否,第一个时间段
.....
001,是,第二个时间段
.....
这样的格式
3.时间需要从前台传入后台的一个时间字段的参数进行判断,但是本人对于AJAX一窍不通,能够以怎样的方式动态获取数据,如果非要用AJAX能不能直接提供完成的代码加上注释最好,感激不尽
4,最多写2条sql,我现在是按照时间来分成2条sql写的
使用的框架是JEECG,echarts,数据库是mysql
还有一点就是请尽量说的白话一点,我是个新手,工作经验不到2个月,学校成绩中游垫底,说的太高深太扑朔迷离我听不懂的
你说的null我不知道是哪些可能为null,可能用ifnull函数就行了。
我就按照你的说明简单建了4个表
楼主对于问题的描述确实有点问题,四个表,两个查询条件,你说了很大一段却没有说得很清楚。
大概分析了一下你的问题,产生NULL的原因在于使用了 LEFT JOIN 左连接查询,所以可能会产生NULL字段,
猜想你之所以NULL改成0是因为绑定的属性可能使用的是int而不是像Integer这样的包装类,如果一定需要将NULL改为0其实可以使用默认值,具体还需你自己考量。
其实笔者是不推荐将NULL改成0的,从程序的设计角度而言,使用NULL接收查询结果时属性的值也为null,而不是0,所以也不会占用内存,使用0会占用一定的内存,并不是一个很好的做法哦。