现有一张表 tb_score 如下:
我想查询结果为:
该如何做呢?
我现在的做法只能
1.先建一个数组 [语文,数学,英语]
2.遍历数组,替换这个英语 多次查询SELECT name,sum(score) FROM tb_score
where class = '英语' group by name
3.程序拼接
有没有直接mysql 语句的做法呢?
用 join?还是啥呢?求告诉一下。
select t.class 课程,
sum(case when t.name='Tom' then t.score else 0 end) 'Tom',
sum(case when t.name='Tom' then t.score else 0 end) 'Jim',
sum(case when t.name='Tom' then t.score else 0 end) 'Lucy'
from tb_score t
group by t.class
你直接SQL全部查出来,程序在内存上处理显示就可以了,不需要分开查询
$resultArray = array(
array("1","Tom","语文","57"),
array("2","Jim","语文","23"),
array("3","Lucy","语文","68"),
array("4","Tom","数学","87"),
array("5","Jim","数学","56"),
array("6","Lucy","数学","79"),
array("7","Tom","英语","94"),
array("8","Jim","英语","77"),
array("9","Lucy","英语","89")
);
$needData = array();
foreach ($resultArray as $item) {
$needData[$item[2]][$item[1]] = $item[3];
}
echo "<pre/>";print_r($needData);
运行结果