【问题标题】:Display number of members of each group in php and mysql在php和mysql中显示每个组的成员数
【发布时间】:2015-04-11 17:56:03
【问题描述】:

在我的 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...什么的?

【问题讨论】:

  • 还在苦苦挣扎?考虑遵循这个简单的两步操作过程: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
  • 您有子组表吗?
  • 不,组存储在严格的层次结构中。他们的 ID 代表该层次结构。例如,第一组(父级)的 id 为 01000,该(子组)的孩子是:01100、01200、01300... 而这些孩子有他们的孩子,例如,孩子 01100 有孩子:01110、01120...

标签: php mysql list group-by yii2


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      我建议尝试运行此代码并查看它是否与您所追求的相符:

      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 函数作为 group by 参数:

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

      【讨论】:

      • 这将返回关联的计数数组。我将如何修改此查询以从名为 group 的相关表中选择组名? group.id = club.group_id 和 group 表有名为“name”的列。另外如何在 html 列表中显示这个?姓名+人数
      猜你喜欢
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多