在通常项目中,数据库基本表和后台管理时管理员见到的表一般都是不一样的,如图一,是基于3张基本表,最后在后台管理中将3张表处理之后,将数据更清晰的展示给管理员,以便管理。
考试信息表中,存放学生编号,以及考试信息,如图二,一张考试表中存储同一学员的多次考试信息。而在后台显示的时候为方便管理,同一学员,不能存在多条记录,现就需要做以下处理:
实现功能:建立视图,将3张基本表进行拼接,显示主要信息,以考试表中的学生编号为主键,
将考试表中的Examitem、Examdate、Examresult三个字段拼接到同一字段,
多条记录拼接为一条记,最后实现如图三
通过一段时间的学习,充分感受到在数据库进行优化的好处,如果是之前,遇到这样的问题,我可能直接用PHP将数据在逐条取出,循环操作了,但是这样的效率十分低下,还可能出现之前的在循环语句中写入数据库操作,这样的代码质量肯定是不高的。
刚刚进入PHP开发,方法不当,处理繁杂,望高手提出指正,谢谢~!
图一
图二
图三
在Mysql中视图的SQL语句如下,其中表名不是实际生产中的表名
其中主要用 conat_ws 将考试表中不同字段,多条记录拼接起来,注意要配合group by语句使用
select `学生表`.`StudentID` AS `StudentID`,`学生表`.`Studentname` AS `Studentname`,`学生表`.`Sex` AS `Sex`,`教练表`.`Coachname` AS `Coachname`,group_concat(concat_ws(',',`考试表`.`Examitem`,`考试表`.`Examdate`,`考试表`.`Examresult`) separator ',') AS `Exam`,`教练表`.`Phone` AS `Phone`,`教练表`.`CoachID` AS `CoachID` from ((`教练表` join `学生表`) join `考试表`) where ((`教练表`.`CoachID` = `学生表`.`CoachID`) and (`学生表`.`StudentID` = `考试表`.`StudentID`)) group by `学生表`.`StudentID`