为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

烙印99 2023-04-15 17:13:50
有一个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>'; ?>
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

先执行

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,
      ...
  ],
  ...
]


查看完整回答
反对 回复 2023-04-17
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

select
username,
count(*),
(select count(*) from user where username = a.username and city = '北京'),
(select count(*) from user where username = a.username and city = '上海')
from user a
group by username

如果城市很多的话,先select username,city,count(*) from user group by username,city查出每个人在每个城市中的人数,然后对结果集进行遍历统计


查看完整回答
反对 回复 2023-04-17
  • 2 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信