求一段MYSQL代码

有如下的表:
table:
id name addr tel phone  
1 name1 add1 tel1 phone1
2 name2 add2 tel2 phone2
3 name3 add1 tel3 phone3
4 name4 add3 tel4 phone4
5 name5 add2 tel5 phone5

需要的输出为:
addr name1 name2 name3 name4 name5
add1 1 0 1 0 0
add2 0 1 0 0 1  
add3 0 0 0 1 0

我现在的解决办法是:
先找出 name的值,$arr_name = "select name from table";
再找出地址,$arr_addr = "select addr from table group by addr"
$i=0
foreach($arr_addr as $sin_addr){
  "select count(*) from table where name = $arr_name[$i] and addr = $sin_addr"
  $i++;
}
思路大概就是这样,但是效率很慢,请问还有更好的办法么?

作者: ibm317   发布时间: 2011-06-12

你这个是“交叉表”
1、与 php 合作实现时的 sql
select name, addr, count(*) as cnt from table group by name, addr

2、单独 mysql 实现要用到存储过程,参考
http://blog.csdn.net/acmain_chm/archive/2009/06/19/4283943.aspx
http://blog.csdn.net/fjfdszj/archive/2009/02/20/3915933.aspx

作者: xuzuning   发布时间: 2011-06-12