php group array导致单行

时间:2016-11-02 18:04:05

标签: php arrays

不确定标题是否适合该问题,但我有以下问题。

以下代码:

while($row = mysql_fetch_array($result2)) {
  print_r($row);
}

产生以下结果:

Array
(
    [y] => 2016
    [m] => 9
    [status] => 0
    [count] => 2
)
Array
(
    [y] => 2016
    [m] => 9
    [status] => 1
    [count] => 33
)
Array
(
    [y] => 2016
    [m] => 9
    [status] => 2
    [count] => 4
)
Array
(
    [y] => 2016
    [m] => 10
    [status] => 0
    [count] => 20
)
Array
(
    [y] => 2016
    [m] => 10
    [status] => 1
    [count] => 3
)
Array
(
    [y] => 2016
    [m] => 10
    [status] => 2
    [count] => 14
)

我想帮助一个将这些结果转换为以下格式的函数:

Array
(
    [y] => 2016
    [m] => 9
    [<name status 0>] => 2
    [<name status 1>] => 33
    [<name status 2>] => 4
)
Array
(
    [y] => 2016
    [m] => 10
    [<name status 0>] => 20
    [<name status 1>] => 3
    [<name status 2>] => 14
)

非常感谢任何帮助。 这是我的第一篇文章,所以如果这篇文章遗漏了重要信息,请指出,我会添加它们。

提前谢谢你。

编辑:

Mysql查询:

 SELECT y, m, count(status) as count, status
 FROM (
  SELECT y, m
  FROM
     (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
     (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
       UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
       UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
   LEFT JOIN db_orders
   ON ym.y = YEAR(db_orders.delivery_date)
      AND ym.m = MONTH(db_orders.delivery_date)
 WHERE
   (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE()))
   OR
   (y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))
 GROUP BY y, m, status;

编辑2:

解决方案:

编辑mysql查询的select解决了我的问题:     SELECT y,m,COUNT(IF(status ='0',1,NULL))'',COUNT(IF(状态='1',1,NULL))'',COUNT(IF(状态='2') ,1,NULL))''

这导致以下查询:

SELECT y, m, COUNT(IF(status='0',1, NULL)) '<name for status 0>', COUNT(IF(status='1',1, NULL)) '<name for status 1>', COUNT(IF(status='2',1, NULL)) '<name for status 2>'
FROM (
  SELECT y, m
  FROM
     (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
     (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
       UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
       UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
   LEFT JOIN db_orders
   ON ym.y = YEAR(db_orders.delivery_date)
      AND ym.m = MONTH(db_orders.delivery_date)
 WHERE
   (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE()))
   OR
   (y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))
 GROUP BY y, m, status;

0 个答案:

没有答案