[英]MySQL/PHP GROUP BY day
我有查詢按天分組所有記錄。
$query = mysql_query("SELECT DATE_FORMAT(date, '%d/%m/%Y') AS day, COUNT(id) AS total FROM invoices GROUP BY day");
我是怎么做到的,它向我展示了所有的日子,即使沒有記錄,直到今天
Omerimuni
我認為最好只獲取表中的所有記錄,按日期排序並使用PHP填補空白。
在MySQL中很難生成一系列日期。 您經常會看到包含存儲過程和臨時表的解決方案,例如此處 。
在PHP中,創建一個循環,貫穿每個日期直到今天。 在循環中,如果查詢結果中存在日期,則可以檢查每條記錄。 如果沒有,您可以只渲染一個空行或任何你想要的。
此檢查不是那么昂貴,因為您也按日期對查詢中的結果進行排序,因此您只需要檢查當前記錄是否與循環中的當前日期具有相同的日期。 如果記錄的日期更長,則不應處理此記錄。 如果日期相同,則處理記錄並獲取下一條記錄。
也許這不是最佳解決方案,但我自己做了:D
$result = mysql_query("SELECT date_format(date, '%Y-%m-%d') AS date FROM invoices ORDER BY id ASC LIMIT 1");
$first = mysql_fetch_array($result);
$year = date('Y', strtotime($first['date']));
$month = date('m', strtotime($first['date']));
$day = date('d', strtotime($first['date']));
for ($i = strtotime($year.'-'.$month.'-'.$day); $i < strtotime('NOW'); $i=$i+24*60*60){
$r = date('d/m/Y',$i);
$res = mysql_query("SELECT DATE_FORMAT(date, '%d/%m/%Y') AS day, COUNT(id) AS total FROM invoices WHERE DATE_FORMAT(date, '%d/%m/%Y') LIKE '%$r%' GROUP BY day");
$arr = mysql_fetch_array($res);
if(mysql_num_rows($res)){
echo "".$arr['day']." => ".$arr['total']."<br>";
}else{
echo date('d/m/Y',$i)."=> 0<br>";
}
}
沒有辦法做到這一點,除非你有幾天的表。 比你可以加入吧
原則上,您可以創建一個包含所有日期的新表。 然后你就把這張桌子加入了“發票”。
但是,我的建議是在PHP中處理這個邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.