2017-04-27 17 views
0

我有一個SQL表,它看起來像這樣: -在一個PHP陣列中存儲零時的日期不存在於SQL表

date sales 
2017-04-01 230 
2017-04-02 120 
2017-04-03 81 
2017-04-04 911 
2017-04-05 90 
2017-04-06 11 
2017-04-09 9 
2017-04-10 140 
2017-04-11 90 

如可以看出,對於2017年4月7日和2017年-04-08沒有數據。 以下是查詢和PHP數組: -

$sql="select sales from sales_data where date >= '2017-04-03'"; 
$RS=mysql_query($sql); 

while(($row = mysql_fetch_assoc($RS))) { 
    $sales_val[] = $row['sales']; 
} 

代碼工作正常,但是我要存儲一個零的情況下,該日期是不存在SQL表。在日期不存在的情況下,是否可以在php數組中插入零?

+1

我可能不會用在上面的評論中給出的鏈接,而是會用你的MySQL數據庫內的日曆表。 –

+1

只是爲了顯示另一種方法:http://stackoverflow.com/questions/3538858/mysql-how-to-fill-missing-dates-in-range – Shadow

+1

一般來說,搜索表達式是:'mysql填補日期範圍內的空白' 。那裏有很多解決問題的問題。 – Shadow

回答

1

試試這個:

$sql="select `date`,`sales` from `sales_data` where `date` >= '2017-04-03' ORDER BY `date`"; 
$qrslt = mysqli_query($db,$sql); 


$min_date = '9999-99-99'; 
$max_date = '0000-00-00'; 
$sales_val = array(); 
while(($row = mysqli_fetch_assoc($qrslt))) { 
    $sales_val[substr($row['date'],0,10)] = $row['sales']; 
    $min_date = date('Y-m-d',strtotime($row['date'])) < $min_date ? date('Y-m-d',strtotime($row['date'])) : $min_date; 
    $max_date = date('Y-m-d',strtotime($row['date'])) >= $max_date ? date('Y-m-d',strtotime($row['date'])) : $max_date; 
} 

$sd = new DateTime($min_date); 
$ed = new DateTime($max_date); 
$num_days = date_diff($sd,$ed)->days; 
$rslts = array(); 
$cnt = 0; 

for($d = 0;$d <= $num_days;$d++) { 
    $dt = strtotime('+'.$d.' day',strtotime($min_date)); 
    $dts = date('Y-m-d',$dt); 
    $rslts[$dts] = isset($sales_val[$dts]) ? $sales_val[$dts] : 0; 
    $cnt++; 
} 

echo "<p>\$rslts:<pre>".print_r($rslts,true)."</pre></p>";