2012-04-11 22 views
0

私はこの請求テーブルからレポート要件に従ってレコードを取得しています。列内の行および/またはクロス集計配列を

私は取得配列は、このようなものです:

Array(
[0] => stdClass Object 
    (
     [bid] => 3 
     [uid] => 2 
     [total_inc] => 100 
     [total_exp] => 55 
     [mon] => 1 
     [year] => 2012 
     [mstdatereg] => 2012-03-14 
    ) 

[1] => stdClass Object 
    (
     [bid] => 2 
     [uid] => 3 
     [total_inc] => 85 
     [total_exp] => 45 
     [mon] => 1 
     [year] => 2012 
     [mstdatereg] => 2012-03-14 
    ) 

[2] => stdClass Object 
    (
     [bid] => 1 
     [uid] => 8 
     [total_inc] => 130 
     [total_exp] => 75 
     [mon] => 1 
     [year] => 2012 
     [mstdatereg] => 2012-03-14 
    ) 

[3] => stdClass Object 
    (
     [bid] => 5 
     [uid] => 25 
     [total_inc] => 130 
     [total_exp] => 65 
     [mon] => 2 
     [year] => 2012 
     [mstdatereg] => 2012-03-14 
    ) 

[4] => stdClass Object 
    (
     [bid] => 4 
     [uid] => 27 
     [total_inc] => 75 
     [total_exp] => 50 
     [mon] => 2 
     [year] => 2012 
     [mstdatereg] => 2012-03-14 
    ) 

[5] => stdClass Object 
    (
     [bid] => 10 
     [uid] => 3 
     [total_inc] => 180 
     [total_exp] => 100 
     [mon] => 3 
     [year] => 2012 
     [mstdatereg] => 2012-04-05 
    ) 

[6] => stdClass Object 
    (
     [bid] => 6 
     [uid] => 12 
     [total_inc] => 60 
     [total_exp] => 35 
     [mon] => 3 
     [year] => 2012 
     [mstdatereg] => 2012-03-14 
    ) 

[7] => stdClass Object 
    (
     [bid] => 7 
     [uid] => 22 
     [total_inc] => 160 
     [total_exp] => 90 
     [mon] => 3 
     [year] => 2012 
     [mstdatereg] => 2012-03-14 
    ) 

[8] => stdClass Object 
    (
     [bid] => 9 
     [uid] => 3 
     [total_inc] => 115 
     [total_exp] => 70 
     [mon] => 4 
     [year] => 2012 
     [mstdatereg] => 2012-03-16 
    ) 
) 

私はループを介して行われていることは、このようなものです結果である:

 January, 2012 
     ========== 
     Income Expense 
    2 100  55 
    3 85  45 
    8 130  75 
    --------------------------------- 
Total 315  175 

     February, 2012 
     =========== 
     Income Expense 
    25 130  65 
    27 75  50 
    --------------------------------- 
Total 205  115 

     March, 2012 
     Income Expense 
    3 180  100 
    12 60  35 
    22 160  90 
    --------------------------------- 
Total 400  225 

     April, 2012 
     Income Expense 
    3 115  70 
    --------------------------------- 
Total 115  70 

Net Total Income: 1035 
Net Total Expense: 585code here 

は、しかし、私が欲しいもの

Sr.No Member 1, 2012  2, 2012  3, 2012  4, 2012  Total 
       Inc|Exp  Inc|Exp  Inc|Exp  Inc|Exp  Inc|Exp 
======================================================================= 
1  2  100|55           100|55 
2  3  85|45     180|100  115|70  380|215 
3  8  130|75           130|75 
4  25     130|65        130|65 
5  27     75|50        75|50 
6  12        60|35     60|35 
7  22        160|90     160|90 
======================================================================= 
Total   315|175  205|115  400|225  115|70  1035|585 
です

投稿する前に、私はそのような問題を探しました。これが私が見つけたものです:Building a "crosstab" or "pivot" table from an array in php

私はそれを私の要求に従って動作させようとしましたが、そうしませんでした。

これから数日間試しています。どんな助けもありがとう。

答えて

0

私はあなたがこの数字の大部分を処理するためにSQLを使用することをお勧めします。その後、

比較的単純なプロセス、:

  1. あなたがテーブルで表現したいか月間(列)を決定します。
  2. Sr.No(または使用したいもの)によってデータを行に分割するには
  3. WHERE句を使用して、選択した日付範囲にないデータを切り捨てます2月&月のため、月が含まれていません)
  4. 合計の欄には、(日付の場合の合計与えられた行の収益または費用の合計(行が以前に選択した基準を使用してグループ化され、覚えておいてください)
  5. 個々月のコラムをですこの列の月、金額、0)
  6. 合計行はPHPで計算されます

プログラムで月の列コードを生成できます。

以下は、指定された月 - 年コンボ(未テスト)のクエリを生成するためのコードの例です。ここからテーブルに入れるのは簡単です(PHPの合計行を計算するだけです)。

$qstr = 'SELECT bid, uid, '; 
$reportMonths = array(1 => 2012, 2 => 2012, 3 => 2012, 4 => 2012); 

foreach ($reportMonths as $mon => $year) { 
    $qstr .= "SUM(IF(mon=$mon AND year=$year),total_inc,0)) as $mon-inc, SUM(IF(mon=$mon AND year=$year,total_exp,0)) as $mon-exp, "; 
} 

$qstr .= 'SUM(total_inc) as total-inc, SUM(total_exp) as total-exp from bill_mst WHERE '; 

foreach ($reportMonths as $mon => $year) { 
    $qstr .= '(mon=$mon AND year=$year) OR '; 
} 
// chop off last or 
$qstr = substr($qstr, 0, -3); 
$qstr .= 'GROUP BY bid, uid ASC'; 

$res = mysql_query($qstr); 
+0

助けてください!例を見せていただければ幸いです。お願いします。 私のテーブルとデータ構造はこちら[こちら](http://www.nextadvisors.in/bill_master_table2.gif) –

+0

今は比較的明確なはずです。 DBから直接必要なすべての行/列を取得できます。書式を設定し、合計行を追加するだけです。 – untitled90

+0

すごいよ!すべてに感謝します。 –

関連する問題