您好,匿名用户
随意问技术百科期待您的加入

MySQL 怎样分组查询

0 投票

有一个user表,表中有两个字段分别是username和city,表中有3条条记录。

username city
张三 北京
张三 上海
李四 北京

如果只是查询张三和李四各有多少人,可以通过下面语句查询

select username,city,count(*)
from user
group by username

问:怎样查询在不同城市叫张三和李四的人各有多少个呢?

我希望显示的结果是:
张三 共2人 北京1人 上海1人 ...
李四 共1人 北京1人 上海0人 ...

所以通过通过下面查询是不可行的。这会导致出现重复行,而且也不能统计张三有多少人。

select username,city,count(*)
from user
group by username,city
张三 1
张三 1
李四 1

我需要的结果是:

张三 2 1 1
李四 1 1 0

==============================================================

下面是我的PHP代码,如果单纯一次查询不能实现,那PHP应怎样写呢?

<?php

$db = new MySQLi(DB_HOST, DB_USER, DB_PASSWD, DB_NAME, DB_PORT);

$query = "
SELECT username,  count( * ) 
FROM user
GROUP BY username
")

$result = $db->query($query);

$num_rows = $result->num_rows;
$num_cols = $result->num_fields;

echo '<table>';
for ($i=0;$i<$num_rows;$i++){
	$rows = $result->fetch_assoc();
	echo '<tr>';
	foreach($rows as $cols){
		echo '<td>'.$cols.'</td>';
	}
	echo '</tr>';
}
echo '</table>';		

?>
用户头像 提问 2012年 12月1日 @ Nidalee 上等兵 (346 威望)
分享到:

1个回答

0 投票
 
最佳答案

先执行

select username, city, count(*) from user group by city, username;

搜出来的结果(简写):

[
  0 => [
    username => name1,
    city => city1,
    count => 1
  ],
  1 => [
    username => name1,
    city => city2,
    count => 2
  ],
  ...
]

假设结果保存在$rs变量里,使用php处理一下:

$user = [];
foreach ($rs as $row) {
    $name = $row['username'];
    $city = $row['city'];
    isset($user[$name]['total']) {
        $user[$name]['total'] += $row['count'];
    } else {
        $user[$name]['total'] = $row['count'];
    }
    $user[$name]['detail'][$city] = $row['count'];
}

当然这是按我自己喜欢的结构存的,你也可以修改成你喜欢的结构。出来的结果如下(简写):

[
  user1 => [
    total => 3,
    detail => [
      city1 => 1,
      city2 => 2,
      ...
  ],
  ...
]
用户头像 回复 2012年 12月1日 @ Skarner 上等兵 (193 威望)
选中 2012年 12月1日 @Nidalee
提一个问题:

相关问题

+1 投票
1 回复 122 阅读
用户头像 提问 2012年 12月1日 @ Taurus 上等兵 (303 威望)
0 投票
1 回复 22 阅读
0 投票
1 回复 52 阅读
用户头像 提问 2012年 12月1日 @ Jarvan IV 上等兵 (203 威望)
0 投票
1 回复 31 阅读
用户头像 提问 2012年 12月1日 @ Demeter 上等兵 (208 威望)
0 投票
0 回复 6 阅读
用户头像 提问 2014年 6月3日 @ 匿名用户

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...