猿问

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

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

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

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

select username,city,count(*)from usergroup by username

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

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

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

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

我需要的结果是:

张三 2 1 1
李四 1 1 0

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

<?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>';		

?>


烙印99
浏览 135回答 2
2回答

慕码人2483693

先执行select&nbsp;username,&nbsp;city,&nbsp;count(*)&nbsp;from&nbsp;user&nbsp;group&nbsp;by&nbsp;city,&nbsp;username;搜出来的结果(简写):[&nbsp;&nbsp;0&nbsp;=>&nbsp;[ &nbsp;&nbsp;&nbsp;&nbsp;username&nbsp;=>&nbsp;name1, &nbsp;&nbsp;&nbsp;&nbsp;city&nbsp;=>&nbsp;city1, &nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=>&nbsp;1 &nbsp;&nbsp;],&nbsp;&nbsp;1&nbsp;=>&nbsp;[ &nbsp;&nbsp;&nbsp;&nbsp;username&nbsp;=>&nbsp;name1, &nbsp;&nbsp;&nbsp;&nbsp;city&nbsp;=>&nbsp;city2, &nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=>&nbsp;2 &nbsp;&nbsp;], &nbsp;&nbsp;... ]假设结果保存在$rs变量里,使用php处理一下:$user&nbsp;=&nbsp;[];foreach&nbsp;($rs&nbsp;as&nbsp;$row)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;$name&nbsp;=&nbsp;$row['username'];&nbsp;&nbsp;&nbsp;&nbsp;$city&nbsp;=&nbsp;$row['city'];&nbsp;&nbsp;&nbsp;&nbsp;isset($user[$name]['total'])&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$user[$name]['total']&nbsp;+=&nbsp;$row['count']; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$user[$name]['total']&nbsp;=&nbsp;$row['count']; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;$user[$name]['detail'][$city]&nbsp;=&nbsp;$row['count']; }当然这是按我自己喜欢的结构存的,你也可以修改成你喜欢的结构。出来的结果如下(简写):[&nbsp;&nbsp;user1&nbsp;=>&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;total&nbsp;=>&nbsp;3, &nbsp;&nbsp;&nbsp;&nbsp;detail&nbsp;=>&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;city1&nbsp;=>&nbsp;1, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;city2&nbsp;=>&nbsp;2, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;], &nbsp;&nbsp;... ]

哈士奇WWW

selectusername,count(*),(select count(*) from user where username = a.username and city = '北京'),(select count(*) from user where username = a.username and city = '上海')from user agroup by username如果城市很多的话,先select username,city,count(*) from user group by username,city查出每个人在每个城市中的人数,然后对结果集进行遍历统计
随时随地看视频慕课网APP
我要回答