0

我有像这样的数据库数据:

date, storage, bandwidth, cost

我可以有这样的条目:

2013-10-24, 1, 0, 0.55; 
2013-10-25, 1, 0, 0.50; 
2013-10-25, 1, 0, 0.25; 
2013-10-25, 0, 1, 0.50;

我从 db 中获取数据并进行 foreach。我当然会得到4行。我需要像这样对数据进行分组:

这意味着在 2013 年 10 月 24 日,我的存储成本为 0.55 而在 2013 年 10 月 25 日,我的存储成本为 0.75,带宽成本为 0.50

我做了一个功能:

    公共函数 sortCostByDay($array, $key)
    {
        $return = 数组();
        foreach($array as $v)
        {
            $storage = $bandwidth = $total = 0;

            if($v['storage'] == 1)
            {
                $storage += $v['cost'];
                $total += $存储;
            }
            如果($v['带宽'] == 1)
            {
                $带宽 += $v['cost'];
                $total += $带宽;
            }

            $return[$v[$key]][] = array('storage' => $storage, 'bandwidth' => $bandwidth, 'total' => $total);
        }

        返回 $return;
    }

这将按 $key 对我的初始数组进行分组。$key 是日期。

所以我最终得到了这个:

'2013-10-24' => 
    array (size=1)
      0 => 
        array (size=3)
          'storage' => 0.55
          'bandwidth' => 0
          'total' => 0.55
'2013-10-25' => 
    array (size=3)
      0 => 
        array (size=3)
          'storage' => 0.50
          'bandwidth' => 0
          'total' => 0.50
      1 => 
        array (size=3)
          'storage' => 0.25
          'bandwidth' => 0
          'total' => 0.50
      2 => 
        array (size=3)
          'storage' => 0
          'bandwidth' => 0.50
          'total' => 1

我不知道如何使它成为:

'2013-10-24' => 
    array (size=1)
      0 => 
        array (size=1)
          'storage' => 0.55
          'bandwidth' => 0
          'total' => 0.55
'2013-10-25' => 
    array (size=1)
      0 => 
        array (size=3)
          'storage' => 0.75
          'bandwidth' => 0.50
          'total' => 1.25

有什么想法吗?

4

1 回答 1

3

您可以从已分组的 mySQL 中获取数据。假设您使用 mySQL 数据库并且您的日期和成本字段称为 day_date 和 day_cost:

SELECT day_date, SUM(day_cost) as storage FROM your_table GROUP BY day_date

它将产生一个数组:

  0 => 
    array (size=1)
      'day_date' => '2013-10-24'
      'storage' => 0.55

我会优化您的数据表以仅节省一天以及存储和带宽成本,而不是标志和一个成本字段。现在你有 4 个字段,在我的情况下你只有 3 个:

day_date (date), storage (float), bandwidth (float)
于 2013-10-12T10:04:18.443 回答