PHP查询数据库国家数据如何按国家分组统计对应出现次数
你要的分组统计效果完全可以通过GROUP BY语句配合聚合函数COUNT()实现,直接在数据库层面计算统计结果,比全量查数据后在PHP侧遍历统计效率更高。
方案1(推荐,数据库层面处理)
修改SQL语句,用GROUP BY country对国家字段分组,用COUNT(*)统计每组的记录数:
$uid = '21'; $select = $dbh->prepare("SELECT `country`, COUNT(*) AS `country_count` FROM `reports` WHERE `profileuid` = ? GROUP BY `country`"); $select->bindParam(1, $uid, PDO::PARAM_STR); $select->execute(); foreach($select as $row){ echo $row['country'] . ' ' . $row['country_count'] . PHP_EOL; }
如果需要按出现次数排序,可以在GROUP BY后追加排序规则,比如按次数从高到低排序就加ORDER BY country_count DESC。
方案2(PHP层面处理,适合需要同时用到全量记录其他字段的场景)
如果你的业务逻辑需要先查询所有匹配记录做其他处理,也可以在PHP侧遍历累计计数:
$uid = '21'; $select = $dbh->prepare("SELECT * FROM `reports` WHERE `profileuid` = ?"); $select->bindParam(1,$uid, PDO::PARAM_STR); $select->execute(); $countryCount = []; foreach($select as $row){ $country = $row['country']; $countryCount[$country] = isset($countryCount[$country]) ? $countryCount[$country] + 1 : 1; // 这里可以继续写其他用到$row其他字段的业务逻辑 } // 输出统计结果 foreach ($countryCount as $country => $count) { echo $country . ' ' . $count . PHP_EOL; }
内容的提问来源于stack exchange,提问作者Lewis
相关产品推荐
相关产品推荐

