2017-03-01 122 views
1

我需要爲過去30天的銷售創建統計圖。在某些日子裏沒有銷售,所以我必須在這些日子裏顯示0。獲取數據庫的每日銷售額 - 無銷售日應顯示0 - 過去30天的銷售額

MySQL的結果

Array 
(
    [0] => Array 
     (
      [total] => 1 
      [soldDay] => 24 
     ) 

    [1] => Array 
     (
      [total] => 1 
      [soldDay] => 13 
     ) 

    [2] => Array 
     (
      [total] => 4 
      [soldDay] => 3 
     ) 

    [3] => Array 
     (
      [total] => 2 
      [soldDay] => 23 
     ) 

使用循環的

SELECT COUNT(*) as total, DAY(FROM_UNIXTIME(tmstmp)) AS soldDay 
FROM tl_voucher_create 
WHERE sold = 1 
GROUP BY soldDay 
ORDER BY tmstmp DESC 0,30 

PHP數組,我把值放入一個新的數組:

for ($x = $day; $x < 31; $x++) { 
    if (isset($this->_["soldDaily"][$x]["soldDay"])) { 
     $total[$x] = $this->_["soldDaily"][$x]["total"]; 
    } else { 
     $total[$x] = 0; 
    } 
} 

哪有我用va製作正確的輸出在過去的30天裏,按正確的順序提供?

在此先感謝

回答

1

基地的實際日期查詢:

SELECT COUNT(*) AS total, DATE(FROM_UNIXTIME(tmstmp)) AS sold_date 
FROM tl_voucher_create 
WHERE sold = 1 
    AND sold_date BETWEEN DATE(NOW() - INTERVAL 30 DAY) AND CURDATE() 
GROUP BY sold_date 
ORDER BY sold_date DESC 

假設從查詢的結果是這樣的:

$data = [ 
    [ 
     'total' => 7, 
     'sold_date' => '2017-02-28' 
    ], 
    [ 
     'total' => 19, 
     'sold_date' => '2017-02-27' 
    ], 
    [ 
     'total' => 8, 
     'sold_date' => '2017-02-24' 
    ], 
    [ 
     'total' => 5, 
     'sold_date' => '2017-02-22' 
    ], 
    [ 
     'total' => 12, 
     'sold_date' => '2017-02-21' 
    ] 
]; 

現在需要基礎的PHP在一個實際的日期對象而不是一個數字30迭代循環,否則你會遇到各種問題和不準確的報告,因爲日期並不簡單從1到30循環(月份有不同的天數,你不能輕易跨回到前一個月,夏令時問題,日期在不同時區等不同)

// Organise the array by date 
$dates = []; 
foreach ($data as $day) { 
    $dates[$day['sold_date']] = $day['total']; 
} 

// Loop through the last 30 days and match each iteration with the data 
$d = new DateTime(); 
for ($i = 0; $i < 30; $i++) { 

    $date = $d->format('Y-m-d'); 

    // If there's no data for the specified date, use zero 
    $total = isset($dates[$date]) ? $dates[$date] : 0; 

    echo '<p>' . $total . ' sold on ' . $date . '</p>'; 

    $d->modify('-1 day'); 
} 
+0

好極了!多謝!! –