簡體   English   中英

即使沒有可用數據,也會顯示每月的每一天

[英]Display Every Day of the month even if no data is available

我希望在SQL語句中顯示該月的所有日期,然后將該日期與我表中的數據相關聯。 如果當天沒有數據,則必須顯示空值。

我的表看起來像這樣。

IN | OUT | EARN | DATE
10   20    0.25   01.02.2013
2    15    0.55   03.02.2013
7    45    0.25   05.02.2013
8    25    0.75   12.02.2013

然后我希望結果看起來像這樣

IN | OUT | EARN | DATE
10   20    0.25   01.02.2013
0    0     0.00   02.02.2013
2    15    0.55   03.02.2013
0    0     0.00   04.02.2013
7    45    0.25   05.02.2013
0    0     0.00   06.02.2013
0    0     0.00   07.02.2013
0    0     0.00   08.02.2013
0    0     0.00   09.02.2013
0    0     0.00   10.02.2013
0    0     0.00   11.02.2013
8    25    0.75   12.02.2013

一直到月底......

請你幫忙解決這個問題。

而我的SQL以這種方式獲取數據

$sql = "SELECT * FROM stats WHERE date >= '".$month_start."' AND date <= '".$month_end."' AND pid={$pid}";

嘗試這個:

SELECT `t`.`IN`, `t`.`OUT`, `t`.`EARN`, `d`.`DATE`
FROM `table` AS `t`
RIGHT JOIN (
    SELECT @date := @date + 1 AS `DATE`
    FROM `tbl31`
    JOIN (SELECT @date := 0) AS `temp`
    LIMIT 31
) AS `d`
ON `d`.`DATE`=`t`.`DATE`

tabletable的名稱。
tbl31是一個有30行以上的表(內容並不重要)。

使用MySQL時我真的不知道更好的方法(我假設您使用MySQL)。

迭代所有的日子:

$start  = new \DateTime('first day of this month');
$end    = new \DateTime('first day of this month + 1 month');
$period = new \DatePeriod($start, new \DateInterval('P1D'), $end);

foreach($period as $day){
  // here check if you have records with this date and print them,
  // otherwise print default values
  print $day->format('d.m.Y');
}

您還可以在一個月的日子里進行迭代:

/*
    $r is something like:
    $r = array(
        array(
            'IN' => '10',
            'OUT' => '20',
            'EARN' => '0.25',
            'DATE' => '01.02.2013'
        ),
        array(
            'IN' => '2',
            'OUT' => '15',
            'EARN' => '0.55',
            'DATE' => '03.02.2013'
        ),
        array(
            'IN' => '7',
            'OUT' => '45',
            'EARN' => '0.25',
            'DATE' => '05.02.2013'
        ),
        array(
            'IN' => '8',
            'OUT' => '25',
            'EARN' => '0.75',
            'DATE' => '12.02.2013'
        )
    );
*/
$arr = array(); // the result array
$period = new DatePeriod(
    new DateTime('first day of this month'),
    new DateInterval('P1D'),
    new DateTime('first day of next month')
);
$ri = 0;
foreach ($period as $day) {
    $i = ((int)$day->format('j')) - 1;
    $date = $day->format('d.m.Y');
    $arr[$i] = array(
        'IN' => '0.00',
        'OUT' => '0.00',
        'EARN' => '0.00',
        'DATE' => $date
    );
    if (array_key_exists($ri, $r) && $r[$ri]['DATE'] == $date) {
        $arr[$i] = $r[$ri];
        $ri++;
    }
}

$ arr與$ r相似,但包含該月的所有日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM