-1

i want sum data group by date

Example data

{"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"},

become like this

example :

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

this is my code/script not yet summing, n not yet encode to 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']
      );
}

thanks in advance

4

2 に答える 2

0

サンプル データは実際には JSON 配列であると想定しています。この例では、これを呼び出します$json_data。を使用して、このデータを PHP 配列に変換できることは既にご存じだと思いますjson_decodeStdObjectたまたまsよりも連想配列の方が好きなので、JSON を連想配列に変換します。

$array_data = json_decode($json_data, TRUE);

これにより、データの多次元配列が得られます。たとえば、reqtimeとのキーを持つ連想レコードとして各レコードの配列を含む配列です。user_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には月と日 (例: "Dec 10") のみが含まれ、年は含まれないことに注意してください。 2012")、それを説明する必要があります。

また、これは、一意のユーザー数ではなく、各日付のレコード数をカウントします。同じ日付に同じユーザーが複数のレコードに表示される可能性があるが、ユーザーを 1 回だけカウントしたい場合は、そのための追加のロジックも必要になります。

これら 2 つは元の質問の一部ではなかったので、演習として残しておきます。

于 2013-01-15T05:16:38.017 に答える
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++
  }
于 2013-01-15T05:07:45.517 に答える