SUM数据组按日期

时间:2013-01-15 04:38:48

标签: php report sum

我希望按日期汇总数据组

示例数据

{"reqtime":"Monday, July 30, 2012 08:55:45","user_id":"9704"},
{"reqtime":"Tuesday, September 4, 2012 11:07:11","user_id":"9717"},
{"reqtime":"Thursday, September 13, 2012 07:41:41","user_id":"9720"},
{"reqtime":"Friday, October 12, 2012 10:20:19","user_id":"9731"},
{"reqtime":"Friday, October 19, 2012 10:20:14","user_id":"9726"},
{"reqtime":"Monday, November 26, 2012 18:42:00","user_id":"9701"}
{"reqtime":"Thursday, December 6, 2012 11:33:52","user_id":"9728"},
{"reqtime":"Monday, December 10, 2012 02:55:53","user_id":"10282"},
{"reqtime":"Monday, December 10, 2012 03:02:24","user_id":"10284"},
{"reqtime":"Monday, December 10, 2012 04:02:57","user_id":"10286"},
{"reqtime":"Monday, December 10, 2012 04:18:29","user_id":"9944"},
{"reqtime":"Monday, December 10, 2012 05:22:38","user_id":"10292"},
{"reqtime":"Monday, December 10, 2012 05:23:05","user_id":"10291"},

变得像这样

示例:

dec 10 : 6 user_id /*( **sum user_id but sorting by date** )*/

这是我的代码/脚本尚未汇总,尚未编码为json:

$query = "SELECT * FROM  `users_demoid` order by reqtime LIMIT 0 , 100";
$result = mysql_query($query) or die("SQL Error 1: " . mysql_error());

// get data and store in a json array
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $date=date("l, F j, Y H:i:s",$row['reqtime']);
    $orders[] = array(
        'reqtime' => $date,
        'user_id' => $row['user_id']
      );
}

提前致谢

2 个答案:

答案 0 :(得分:0)

$arr = json_decode($json_arr) ;
$arr_res=array();
$i=0;
 foreach($arr as $stdobj)
   {
      $search = $stdobj->reqtime;
      $arr_res[$i]['user_id']=$stdobj->user_id;
      foreach($arr as $stdobj2 )
      {
            if($search == $stdobj2->reqtime)
            {
              $arr_res[$i]['sum'] +=1;
             } 
      }
   $i++
  }

答案 1 :(得分:0)

我假设您的示例数据实际上是一个JSON数组。我们将其称为$json_data作为示例。我相信您已经知道可以使用json_decode将此数据转换为PHP数组。我们将JSON转换为关联数组,因为我碰巧比StdObject s更喜欢它们:

$array_data = json_decode($json_data, TRUE);

这将为您提供数据的多维数组 - 一个包含每个记录数组的数组,作为具有reqtimeuser_id键的关联记录,例如:

Array
(
    [0] => Array
        (
            [reqtime] => Monday, December 10, 2012 02:55:53
            [user_id] => 10282
        )

    [1] => Array
        (
            [reqtime] => Monday, December 10, 2012 02:55:53
            [user_id] => 10282
        )

)

现在我们有一个我们可以迭代的格式的数据,所以我们会这样做。在每次迭代中,我们将reqtime转换为便于比较的格式 - 基本上只是删除时间组件。然后我们将该日期作为结果数组的键添加,如果它尚不存在于该数组中,或者如果它存在则增加它的值:

$result = array();
foreach($array_data as $data_record) {
  $date = date('M d', strtotime($data_record['reqtime']));
  if (isset($result[$date])) {
    $result[$date]++;
  } else {
    $result[$date] = 1;
  }
}

请注意,日期格式M d仅包含月份和日期(例如“12月10日”),但不包含年份,因此,如果您的数据可能包含多年的重叠日期(例如“ 2011年12月10日“和”2012年12月10日“),那么你需要考虑到这一点。

此外,这将计算每个日期的记录数,而不是唯一用户的数量。如果同一个用户可能在同一个日期出现在多个记录中,但您只想计算一次用户,那么您也需要额外的逻辑。

我会把这两个作为练习留给你,因为它们不是原始问题的一部分。