msyql和PHP

时间:2019-02-13 04:54:45

标签: php mysql

嗨,我需要有关查询的帮助,我有一个trackdb表,我需要获取总计数,然后对每个用户进行排名。

trackdb ----------`` ID task task2 task3 task4 task5 task6 User Date 1 Clean Repair Emp1 1/1/2019 2 Repair Emp2 1/2/2019 3 Clean Emp1 1/5/2019 4 Repair Emp3 1/6/2019 5 Clean Emp1 1/10/2019

我想每个月完成每个用户的全部任务,然后对它们进行排名

  

SELECT用户,COUNT(在(任务=“清理”或任务=“修复”)然后1的情况下))作为总任务,计数(在(任务2 =“清洁”或任务3 =“修复”)的情况下,则1结束) )AS totaltask1,COUNT(CASE WHEN(task3 ='Clean'OR task3 ='Repair')THEN 1 END)AS totaltask,COUNT(CASE WHEN(task4 ='Clean'OR task4 ='Repair')THEN 1 END)AS totaltask,COUNT(CASE WHEN(task5 ='Clean'OR task5 ='Repair')THEN 1 END)AS totaltask,COUNT(CASE WHEN(task6 ='Clean'OR task6 ='Repair')THEN 1 END)AS totaltask, FROM trackdb WHERE YEAR(date_received)='$ period'AND User ='$ empname'AND MONTH(date_received)='$ month'

$resultprod = mysqli_query($database,$queryprod);  
$rowprod = mysqli_fetch_array($resultprod);
$totprod = $rowprod['totaltask'] + $rowprod['totaltask1'] + $rowprod['totaltask2'] + $rowprod['totaltask3'] + $rowprod['totaltask4'] + $rowprod['totaltask5'];

通过上述查询,我​​每年可以获得每月Emp1的总任务,但是如果与其他雇员相比,我还需要获得Emp1的排名。

希望有人可以提供帮助,在此先谢谢您!

1 个答案:

答案 0 :(得分:0)

几个月前,我遇到了同样的问题。像这样将动态数据透视图与group_concat一起使用。

SET @sql_dynamic = (
    SELECT
        GROUP_CONCAT( DISTINCT
            CONCAT(
                'SUM( IF(MONTH(trx_date) = '
                , MONTH(trx_date)
                , ', amount,0) ) AS mo_'
                , MONTH(trx_date)
            )
        )
    FROM sales_table
);

SET @sql = CONCAT('SELECT name, ', 
              @sql_dynamic, ' 
           FROM sales_table
           GROUP BY name WITH ROLLUP'
       );

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

结果:

+ --------- + ------ + ------ + ------ + |名称| mo_1 | mo_2 | mo_3 | + --------- + ------ + ------ + ------ + |阿尔法| 375 | 815 | 375 | |布拉沃310 | 525 | 825 | |查理| 850 | 300 | 725 | |三角洲| 0 | 1000 | 370 | | NULL | 1535 | 2640 | 2295 | + --------- + ------ + ------ + ------ +