在我的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 ......无论如何?
答案 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。