Home  >  Article  >  Backend Development  >  如何做数据库的行列转置

如何做数据库的行列转置

WBOY
WBOYOriginal
2016-06-23 13:39:381271browse

thinkphp和mysql。数据库如图所示:

建表的sql语句如下:

CREATE TABLE `score_collect` (   `std_id` int(10) NOT NULL,   `course_id` int(11) NOT NULL,   `score` varchar(255) DEFAULT NULL,   PRIMARY KEY (`std_id`,`course_id`), )

INSERT INTO `score_collect` VALUES ('2012508082', '2', '20'); INSERT INTO `score_collect` VALUES ('2012508082', '3', '10'); INSERT INTO `score_collect` VALUES ('2012508082', '4', '30'); INSERT INTO `score_collect` VALUES ('2012508084', '2', '21'); INSERT INTO `score_collect` VALUES ('2012508084', '3', '11'); INSERT INTO `score_collect` VALUES ('2012508084', '4', '31');


需要实现的是将上图中的数据调整为这样在前台显示出来:

其中,表行数不固定。std_id和course_id也不固定。
 (不知道我把问题表达清楚了没有)。用php也可以,但是我想最好还是用sql语句吧。当然。。能兼顾性能最好。
 跪求各路大神解决,谢谢。
另外祝大家春节快乐,万事如意。 谢谢


回复讨论(解决方案)

SELECT std_id,GROUP_CONCAT(course_id) AS course_id,GROUP_CONCAT(score) AS score FROM `score_collect` GROUP BY std_id;

//$list=array(array('std_id'=>'2012508082','course_id'=>'2,3,4','score'=>'20,10,30'),array('std_id'=>'2012508084','course_id'=>'2,3,4','score'=>'21,11,31'),);foreach($list as $key=>$val){	$course_id_arr=explode(',',$val['course_id']);	$score_arr=explode(',',$val['score']);	unset($list[$key]['course_id']);	unset($list[$key]['score']);	foreach($course_id_arr as $key1=>$val1)	{		$list[$key][$val1]=$score_arr[$key1];	}}print_r($list);

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn