显示php和mysql中每个组的成员数

时间:2015-02-11 11:20:40

标签: php mysql list group-by yii2

在我的MySql表中,我有像id这样定义的组:

组1 - 01
第2组 - 02
第3 - 03组

这些组有子组:

01组有子组:011,013,014 ......

成员是每个小组的一部分。例如,John是011子组的成员。

我需要计算每个组的所有成员(以及它的子组)并将其显示在组名旁边,如下所示:

组01:100名成员
02组:45名成员 03组:73名成员

我正在使用,html,php,mysql和yii2 php框架。

使用yii2活动记录,我正在计算组01的成员:

<?= Club::find()->where(['like', 'group_id', '01%', false])->count() ?>

此代码正在执行此查询:

SELECT COUNT(*) FROM `club` WHERE `group_id` LIKE '01%'

执行此任务的最佳方式是什么?我需要显示包含所有组成员数量的列表。我不认为最佳方式是为每个组和页面中的硬编码运行此查询。

任何帮助,mysql,php,yii2 ......无论如何?

3 个答案:

答案 0 :(得分:0)

我不熟悉Yi,但你需要的mysql语句是:

SELECT COUNT(*) 
FROM `club` 
GROUP BY substr(group_id, 1, 2)

答案 1 :(得分:0)

我建议尝试运行此代码并查看它是否与您之后的代码匹配:

SELECT `group_id`, Count(`group_id`) AS `Count of group_id` FROM `club` GROUP BY `group_id`

希望它会返回一个group_id表,每个表都有一个计数。

更新 - 如果group_id列包含011,012等而不是01,02,03,则使用substr或left函数作为参数分组:

SELECT `group_id`, Count(`group_id`) AS `Count of group_id` FROM `club` GROUP BY Left(`group_id`,2)

答案 2 :(得分:0)

您可以选择所有内容并在PHP中执行计数,例如..

 foreach($results as $result){
     $counts[substr($result['group_id'],0,2)]++;
 }

假设子组的前2位数始终是组ID。