1. 程式人生 > >MySQL中實現連續日期內數據統計,缺省天數0補全

MySQL中實現連續日期內數據統計,缺省天數0補全

中一 起點 dump count foreach ast [1] each 統計

某一日,需要查詢訂單表中一個月每天的金額數

查詢出數據如下:

array(14) {
  [0] => array(2) {
    ["money"] => string(7) "2000.00"
    ["times"] => string(2) "12"
  }
  [1] => array(2) {
    ["money"] => string(7) "6000.00"
    ["times"] => string(2) "14"
  }
  [2] => array(2) {
    ["money"] => string(8) "31569.00"
    ["times"] => string(2) "15"
  }
  [3] => array(2) {
    ["money"] => string(9) "134596.50"
    ["times"] => string(2) "16"
  }
  [4] => array(2) {
    ["money"] => string(7) "4000.00"
    ["times"] => string(2) "17"
  }
  [5] => array(2) {
    ["money"] => string(8) "20525.00"
    ["times"] => string(2) "18"
  }
  [6] => array(2) {
    ["money"] => string(7) "2000.00"
    ["times"] => string(2) "20"
  }
  [7] => array(2) {
    ["money"] => string(7) "6000.00"
    ["times"] => string(2) "21"
  }
  [8] => array(2) {
    ["money"] => string(7) "9000.00"
    ["times"] => string(2) "22"
  }
  [9] => array(2) {
    ["money"] => string(7) "2000.00"
    ["times"] => string(2) "23"
  }
  [10] => array(2) {
    ["money"] => string(7) "2000.00"
    ["times"] => string(2) "25"
  }
  [11] => array(2) {
    ["money"] => string(7) "7000.00"
    ["times"] => string(2) "26"
  }
  [12] => array(2) {
    ["money"] => string(8) "10000.00"
    ["times"] => string(2) "27"
  }
  [13] => array(2) {
    ["money"] => string(9) "212263.28"
    ["times"] => string(2) "28"
  }
}

只查詢了14天的數據,而且中間還有幾天沒有數據,但是我想要沒查詢的天數顯示為0,這個時候就需要先給數據加個起點!如果沒有1號,我們就把一號加上,有就略過! 然後還要加個終點,終點應放在原始數組中,不然算法不可能自作主張的添加數據,我這裏默認每個月31號,畢竟要做折線統計圖,日期是固定的,方法如下:

 1          if ($list[0][‘times‘] !=1){
 2                 array_unshift($list,array(‘money‘ => ‘0‘, ‘times‘ =>‘01‘)); //這樣就添加了起點
 3             }
4 5 if ($list[count($list)-1] !=31){ 6 $list[] = array(‘money‘ => ‘0‘, ‘times‘ => ‘31‘);//這樣就添加了終點 7 } 8 9 10 $last = ‘1‘; 11 12 foreach($list as $r) { 13 while($last && $last < $r[‘times‘]) {
14 $res[] = array(‘money‘ => ‘0‘,‘times‘ => "$last"); 15 16 $last +=1; 17 } 18 $res[] = $r; 19 $last +=1; 20 } 21 22 23 // $res就是最終的結果 24 dump($res);

結果如下:

array(31) {
  [0] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(2) "01"
  }
  [1] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(1) "2"
  }
  [2] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(1) "3"
  }
  [3] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(1) "4"
  }
  [4] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(1) "5"
  }
  [5] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(1) "6"
  }
  [6] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(1) "7"
  }
  [7] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(1) "8"
  }
  [8] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(1) "9"
  }
  [9] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(2) "10"
  }
  [10] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(2) "11"
  }
  [11] => array(2) {
    ["money"] => string(7) "2000.00"
    ["times"] => string(2) "12"
  }
  [12] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(2) "13"
  }
  [13] => array(2) {
    ["money"] => string(7) "6000.00"
    ["times"] => string(2) "14"
  }
  [14] => array(2) {
    ["money"] => string(8) "31569.00"
    ["times"] => string(2) "15"
  }
  [15] => array(2) {
    ["money"] => string(9) "134596.50"
    ["times"] => string(2) "16"
  }
  [16] => array(2) {
    ["money"] => string(7) "4000.00"
    ["times"] => string(2) "17"
  }
  [17] => array(2) {
    ["money"] => string(8) "20525.00"
    ["times"] => string(2) "18"
  }
  [18] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(2) "19"
  }
  [19] => array(2) {
    ["money"] => string(7) "2000.00"
    ["times"] => string(2) "20"
  }
  [20] => array(2) {
    ["money"] => string(7) "6000.00"
    ["times"] => string(2) "21"
  }
  [21] => array(2) {
    ["money"] => string(7) "9000.00"
    ["times"] => string(2) "22"
  }
  [22] => array(2) {
    ["money"] => string(7) "2000.00"
    ["times"] => string(2) "23"
  }
  [23] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(2) "24"
  }
  [24] => array(2) {
    ["money"] => string(7) "2000.00"
    ["times"] => string(2) "25"
  }
  [25] => array(2) {
    ["money"] => string(7) "7000.00"
    ["times"] => string(2) "26"
  }
  [26] => array(2) {
    ["money"] => string(8) "10000.00"
    ["times"] => string(2) "27"
  }
  [27] => array(2) {
    ["money"] => string(9) "212263.28"
    ["times"] => string(2) "28"
  }
  [28] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(2) "29"
  }
  [29] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(2) "30"
  }
  [30] => array(2) {
    ["money"] => string(1) "0"
    ["times"] => string(2) "31"
  }
}

同樣的. 12個月也可以這樣操作,只要把終點改為12就可以了

MySQL中實現連續日期內數據統計,缺省天數0補全