[英]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`
table
是table
的名稱。
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.