10.在SQL中实现行转列,单个表单内部分数据联动刷新
课程内容
在SQL中实现行转列 单个表单内部分数据联动刷新
课程目标
掌握行转列的SQL写法,掌握表单中部分数据联动刷新的方法
课程概要
在SQL中实现行转列
现在我们课程表的基础信息设置已经开发完成,到了要设置和展示最终结构的时候了,先让我们看看课程表长什么样。
课程表是一张二维表,数据库中的表也是二维表,那么能不能够直接存入到数据库中?
能,但是不推荐这样做。
正确的做法应该是这样的:将星期几和第几节课都设计成课程表的一个属性,与课程平行对应;这样做的好处是:
方便统计每周有多少节什么课程。
方便扩展,如果周六需要上课,只需要添加行,而不是修改表结构。
空间利用率更高,不会存在空白“单元格”。
SQL写法
SELECT
course_plan.slot,
MAX( IF(course_plan.`week` = 1, course_plan.course_name, NULL) ) week1,
MAX( IF(course_plan.`week` = 2, course_plan.course_name, NULL) ) week2,
MAX( IF(course_plan.`week` = 3, course_plan.course_name, NULL) ) week3,
MAX( IF(course_plan.`week` = 4, course_plan.course_name, NULL) ) week4,
MAX( IF(course_plan.`week` = 5, course_plan.course_name, NULL) ) week5
FROM
course_plan
WHERE
course_plan.class_id = 1
GROUP BY
course_plan.slot
单个表单内部分数据联动刷新
下拉选择后,触发影响表单窗口事件,表单窗口数据源将不需要刷新的输入域封装到SQL中
SELECT
@12-WEEK@ week,
@12-SLOT@ slot,
@12-CCT_ID@ cct_id,
class_course_teacher.class_name,
class_course_teacher.course_name,
class_course_teacher.teacher_name
FROM
class_course_teacher
WHERE
class_course_teacher.id = @12-CCT_ID@