热搜:NVER node 开发 php

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

2024-09-21 23:05:01
求助数据库,那个大神能解决

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

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