[英]How to fetch records for every day in a month using mysql
我正在使用mysql,並且我的報告要求獲取每月(如果按月搜索)和每月(如果按年份搜索)每天的注冊數據。
這是我用來獲取結果的查詢
查詢:
SELECT
COUNT(tenant_id) AS registered,
DATE_FORMAT(created_date,'%d') AS weeks
FROM asign_user
WHERE DATE_FORMAT(created_date,'%m')='02'
AND DATE_FORMAT(created_date,'%Y') = '2014'
GROUP BY DATE_FORMAT(created_date,'%d');
------------------------------- Day | Registered ------------------------------- 11 5 12 6 13 1 14 8 16 9 25 15
預期結果應該是
------------------------------- Day | Registered ------------------------------- 01 0 02 0 03 0 04 0 05 0 06 0 . . . . . . . . 11 5 12 6 13 1 14 8 15 0 16 9 . . . . 25 15 . . . . 30/31 0
我曾經創建一個名為“ all_days”的額外表,該表由給定期間(5年)中的所有天數組成。 您可以將其與外部聯接一起使用,然后創建所需的輸出。 我還建議您不要使用該方法,而應在應用程序級別上這樣做(這就是Strawberry所說的)。 我在報告引擎中使用了該方法,該方法不允許任何應用程序級別的編碼,因此對我有用。...但是結果很慢:(
就個人而言,我會將查詢略微移至第weeks
,以便可以在其上使用array_shift
。
注意:我在基本的MySQL中編寫它,因為您未聲明是使用mysql_還是mysqli_作為連接層
$sql = <<<SQL
SELECT
DATE_FORMAT(created_date,'%d') AS weeks
COUNT(tenant_id) AS registered,
FROM asign_user
WHERE DATE_FORMAT(created_date,'%m')='02'
AND DATE_FORMAT(created_date,'%Y') = '2014'
GROUP BY DATE_FORMAT(created_date,'%d');
SQL;
$run = mysql_query($sql);
if (mysql_num_rows($run) > 0)
{
// Create data
// This will give the days their registration count.
$days = array();
while ($day = mysql_fetch_assoc($run))
{
$days[array_shift($day)] = $day['registered'];
}
// Calculate days in the month
$month = cal_days_in_month(CAL_GREGORIAN, 2, 2014);
// Then loop them and print results
for ($i = 1; $i <= $month; $i++)
{
if (isset($days[$i])) {
echo "$i : " . $days[$i] . "<br />";
}
else {
echo "$i : 0<br />";
}
}
}
上面顯示了一個月中的天數-每月編輯起來應該不難:)
請訪問此博客, http://www.media-division.com/using-mysql-generate-daily-sales-reports-filled-gaps/
這個想法是創建一個日歷表。
您還可以使用cron作業和此sql INSERT INTO calendar
( datefield
)VALUES(CURDATE())來填充新日期日期
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.