【问题标题】:How to sum total row each month group by month and user name如何按月和用户名汇总每个月组的总行
【发布时间】:2016-07-19 10:07:11
【问题描述】:

我有一个每个月的销售记录表。在这种情况下,每个推销员都有自己的代码bdnk

MySQL

select sale_plc
      , month(sale_date) as mon
      , sum(sale_cost) as cost 
from daily_sales 
 where year(sale_date)='2016' 
group 
    by year(sale_date)
      , month(sale_date)
      , sale_plc 
order 
    by month(sale_date)
      , sale_plc asc 
 LIMIT 0, 30

查询后我得到了这个结果:

id  mon cost
bd  1   224787
nk  1   721102
bd  2   440399
nk  2   898020
bd  3   363543
nk  3   878250

虽然

  • id=销售员代码(sale_plc)
  • mon=月数
  • cost=此 ID 本月的总销售额。

根据结果。我期望像这样的数组的结果。 数组

(
    [1] => Array
        (
            [mon] => 1
            [bd] => 224787
            [nk] => 721102
        )
    [2] => Array
        (
            [mon] => 2
            [bd] => 440399
            [nk] => 898020
        )
    [3] => Array
        (
            [mon] => 3
            [bd] => 363543
            [nk] => 878250
        )
    )

我知道这与sale_plc 有关。我需要把它做成数组,但我不知道这样做。

【问题讨论】:

  • mysqlsql-server?它们不是一回事,可能会改变您查询的语法。
  • 我已经根据 sql 查询的语法删除了 sql-server 标签 - 特别是属于 MySql 并且不能与 Sql-Server 一起使用的 Limit 关键字。
  • 这是 PHP 中一个简单的一维到二维数组的转换
  • @sean mysql,那么当语法正确时,最好的解决方案是什么?
  • @Strawberry 请告诉我它有多简单。

标签: php mysql


【解决方案1】:

我没有你的 SQL 输出,所以我创建了一个数组并编写了我自己的代码,其功能与我为你的数组所做的相同。

PHP

$arr = array(array("id" => "bd", "mon" => "1", "cost" => "224787"),
            array("id" => "nk", "mon" => "1", "cost" => "721102"),
            array("id" => "bd", "mon" => "2", "cost" => "440399"),
            array("id" => "nk", "mon" => "2", "cost" => "898020"),
            array("id" => "bd", "mon" => "3", "cost" => "363543"),
            array("id" => "nk", "mon" => "3", "cost" => "878250"),
            );

$output_arr = array();      
$tmp = 0;
foreach($arr as $key => $value){
    if($tmp == 0 || $tmp != $value['mon'])
        $output_arr[$value['mon']][mon] = $value['mon'];
    if($value['id'] == 'bd')
        $output_arr[$value['mon']][$value['id']] = $value['cost'];
    if($value['id'] == 'nk')
        $output_arr[$value['mon']][$value['id']] = $value['cost'];
    $tmp = $value['mon'];
}
echo "<pre>";
print_r($output_arr);
echo "</pre>";

输出

Array
(
    [1] => Array
        (
            [mon] => 1
            [bd] => 224787
            [nk] => 721102
        )

    [2] => Array
        (
            [mon] => 2
            [bd] => 440399
            [nk] => 898020
        )

    [3] => Array
        (
            [mon] => 3
            [bd] => 363543
            [nk] => 878250
        )

)

我已经用你的 SQL 输出回答了。以您的 SQL 为例。

PHP

$output_arr = array();
//Your sql
$sql = "select sale_plc
      , month(sale_date) as mon
      , sum(sale_cost) as cost 
from daily_sales 
 where year(sale_date)='2016' 
group 
    by year(sale_date)
      , month(sale_date)
      , sale_plc 
order 
    by month(sale_date)
      , sale_plc asc 
 LIMIT 0, 30";
$tmp = 0;
$i = 0;
$qry = mysqli_query($conn, $sql);
while ($obj = mysqli_fetch_object($qry )){
    if($tmp == 0 || $tmp != $obj->mon)
        $output_arr[$obj->mon][mon] = $obj->mon;
    if($obj->id == 'bd')
        $output_arr[$obj->mon][$obj->id] = $obj->cost;
    if($obj->id == 'nk')
        $output_arr[$obj->mon][$obj->id] = $obj->cost;
    $tmp = $obj->mon;
}

print_r($output_arr);

输出:

Array(
[1] => Array
    (
        [mon] => 1
        [bd] => 224787
        [nk] => 721102
    )
[2] => Array
    (
        [mon] => 2
        [bd] => 440399
        [nk] => 898020
    )
[3] => Array
    (
        [mon] => 3
        [bd] => 363543
        [nk] => 878250
    )
)

试试这个答案,如果有任何问题,请告诉我。

【讨论】:

  • Frayne,感谢您的帮助,但结果如下:Array ( [1] =&gt; Array ( [mon] =&gt; 1 ) [2] =&gt; Array ( [mon] =&gt; 2 ) [3] =&gt; Array ( [mon] =&gt; 3 ) )
猜你喜欢
  • 2015-04-03
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多