php - 如何求和相同角色记录的数量?

标签 php mysql

我想一次获得相同角色的数量。当我获取某个代理 (11150000001) 介绍的代理详细信息记录时。它会返回很多不同角色的代理记录(1000,2000,3000,4000,5000,6000)。

我需要从中获取代理商的业务总额。现在我明白了。但是如果有一些代理人担任相同的角色,我想以单一数量获得相同角色代理人的数量,但我是分开获得的。

  //get all employee under one employee
            $rank1=''; $rank2='';$rank3='';$rank4='';$rank5='';$rank6='';
               $get_employee="SELECT emp_code,intro_code FROM emp_details WHERE intro_code='".$emp_code."'";
               $exe_employee=mysql_query($get_employee);

               while($fetch_emp=mysql_fetch_assoc($exe_employee))
               {
                     $total_amount1=0;
                     $role='';
                   $employee_code=$fetch_emp['emp_code'];
                   //echo $employee_code."<br>";
                   $get_premium="SELECT emp_code,user_role,premium_amount FROM business_details WHERE emp_code='".$employee_code."'";
                  //echo $get_premium."<br>";
                   $exe_premium=mysql_query($get_premium);

                   while($fetch_amount=mysql_fetch_array($exe_premium))
                   {
                      $total_amount1 +=$fetch_amount['premium_amount'];
                      $role=$fetch_amount['user_role'];  
                   }
              }
      echo $role."-".$total_amount1."<br>"; 
       // Role-Amount
       // 5000-75000
        //  5000-105000
        //3000-15000

enter image description here

在上图中,我在第 5 级获得 10,500,但我想在第 5 列获得 75000+10500。

下面是我的表结构:

enter image description here

最佳答案

整个代码块被单个 SQL 查询所取代。你想创建一个 pivot table .

让我们从一个相对简单的查询开始,该查询获取所有员工角色组合的总 premium_amount:

SELECT emp_code,
       user_role,
       SUM(premium_amount) AS total_amount
FROM business_details
GROUP BY emp_code, user_role;

这会产生这样的结果:

emp_code    | user_role | total_amount
-----------------------------------
15040000001 | 3000      |  15000     
15040000001 | 5000      | 180000
11130000001 | 4000      |  30000
11130000001 | 1000      |   5000

这已经在表格中包含了您想要的所有信息,但布局不正确。无需使用 PHP 将其重新格式化为您希望用于表格的行/列,SQL 可以为我们完成。

我们将指定 user_role 可以作为不同列的不同值,而不是按 user_role 分组:

SELECT emp_code,
       SUM(CASE WHEN user_role=1000 THEN premium_amount ELSE 0 END) AS rank1,
       SUM(CASE WHEN user_role=2000 THEN premium_amount ELSE 0 END) AS rank2,
       SUM(CASE WHEN user_role=3000 THEN premium_amount ELSE 0 END) AS rank3,
       SUM(CASE WHEN user_role=4000 THEN premium_amount ELSE 0 END) AS rank4,
       SUM(CASE WHEN user_role=5000 THEN premium_amount ELSE 0 END) AS rank5,
       SUM(CASE WHEN user_role=5000 THEN premium_amount ELSE 0 END) AS rank6
FROM business_details
GROUP BY emp_code;

结果是:

emp_code    | rank1 | rank2 | rank3 | rank4 | rank5  | rank6
------------------------------------------------------------
15040000001 |     0 |     0 | 15000 |     0 | 180000 |     0
11130000001 |  5000 |     0 |     0 | 30000 |      0 |     0

奖金建议

您发布的 PHP 代码包含一个明显的安全漏洞,该漏洞使您的数据库(或可能是您的整个系统)对任何人都完全开放。 SQL injection在您的网络应用程序中拥有它并不有趣!我在 previous answer 中写过它.

关于php - 如何求和相同角色记录的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28494200/

相关文章:

php - 如何高效地存储多类别、多属性的数据?

php - 使用for循环和mysql更新数据库

php - 从 PHP 数组获取值并显示它们

java.lang.IllegalStateException : Dialect must be spatially enabled dialect

python - 如何使用 flask 在 Openshift 上安装 mysqldb

php - 在 Laravel 中同时保存数据和附加

php - YII 2.0.3 View 不呈现。它只是一片空白。调用索引时仅显示 1

php - MongoDB RegEx 引擎完整性

PHP MYSQL - 使用逗号分隔列表搜索逗号分隔列表

mysql - 分组最大值适用于表,但不适用于 View