欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

求助数据库,那个大神能解决

程序员文章站 2022-05-22 17:09:58
...
sql 数据库 有一张表 :

id 时间 地区 价格
1 2001 上海 5

2 2001 上海 5

2 2001 山东 6

3 2002 上海 8

4 2002 山东 9

7 2003 山东 10

8 2003 上海 空



想将它扫描出来放在前台页面成这样


时间 上海 山东
2001 5 6
2002 8 9
2003 10

回复讨论(解决方案)

这个用到存储过程的,不然应该实现不了,除非你知道有几个地区,比如你就上海跟山东这2个地区,那可以用一句弄出来!

看看其他大神有没有好的方法!

CREATE TABLE `mytable` (  id int,  时间 varchar(4),  地区 varchar(50),  价格 decimal);insert into mytable select 1,'2001','上海',    5union allselect 2,'2001','上海',    5 union allselect 2,'2001','山东',    6union allselect 3,'2002','上海',    8 union allselect 4,'2002','山东',    9union allselect 7,'2003','山东',    10union allselect 8,'2003','上海',    null;select * from mytable;select 时间,( case 地区  when '上海' then 价格 else null end)  as '上海',( case 地区  when '山东' then 价格 else null end)  as '山东'from mytablegroup by 时间;

$rs = mysql_query('select * from tbl_name');while($r = mysql_fetch_assoc($rs)) {  $res[$r['时间']][$r['地区']] = $r['价格'];}$t = array_keys(current($res));echo "\t" . join("\t", $t) . "\n";foreach($res as $k=>$r) {  echo $k;  foreach($t as $v) echo "\t{$r[$v]} ";  echo "\n";
	上海	山东2001	5 	6 2002	8 	9 2003	 	10 

CREATE TABLE `mytable` (  id int,  时间 varchar(4),  地区 varchar(50),  价格 decimal);insert into mytable select 1,'2001','上海',    5union allselect 2,'2001','上海',    5 union allselect 2,'2001','山东',    6union allselect 3,'2002','上海',    8 union allselect 4,'2002','山东',    9union allselect 7,'2003','山东',    10union allselect 8,'2003','上海',    null;select * from mytable;select 时间,( case 地区  when '上海' then 价格 else null end)  as '上海',( case 地区  when '山东' then 价格 else null end)  as '山东'from mytablegroup by 时间;


这个就是假设地区是已知的(只要山东与上海2个地区),不具备通用性!

参考这个帖子第4种方法 http://www.cnblogs.com/lhj588/archive/2012/06/15/2550392.html

楼上的方法都不错,学习了