[英]Print rows that don't exist in table?
我有一個查詢,匯總按日期分組的行。 基本上,它計算一天中有多少會員申請,並每天打印出結果。 自然,如果一天中沒有任何應用程序,則不會顯示該行(第15位和第17位以下的示例沒有應用程序.....
Date | Applications
-----------------------------------
12/01/2010 | 44
13/01/2010 | 73
14/01/2010 | 66
16/01/2010 | 102
18/01/2010 | 12
19/01/2010 | 22
我需要它來打印日期,如果沒有應用程序,則要打印幾天的日期,所以請打印0,這樣就不會跳過任何天。 任何想法如何做到這一點。 我想過一年中的每一天都參加餐桌,但這似乎太過分了
查詢如下
SELECT
application_date AS Date,
COUNT(*) AS Applications
FROM members
GROUP BY ap_date
在相關日期范圍內選擇。 然后遍歷日期范圍,以查看當前行是否匹配。 如果不是,則輸出0。如果是,則輸出適當的數字並前進到下一行。
我將創建一個PHP數組,並且數組索引將是一個字符串,日期,我更喜歡這種格式YYYY-MM-DD,並且我會做類似的事情(請注意,鍵的日期格式很重要)
// how far in the past to go
$days_in_the_past = 365;
// default to today, unix timestamp file
$start_day = time();
// the array that contains all out dates
$dates = array();
// sec * min * hours
$secs_in_a_day = 60 * 60 * 24;
// note we're going backwards here
for ( $i=0; $i <= $days_in_the_past; $i++ )
{
$key = date('Y-M-D', ($start_day - ($secs_in_a_day * $i)));
// this sets the format of 2010-01-21 as the key
$dates[$key] = "";
}
$query = 'SELECT date, app FROM table';
$result = mysql_query($query);
while ( $row = mysql_fetch_assoc($result) )
{
$key = date('Y-M-D', strtotime($row['Date']));
$dates[] = $row['Applications'];
}
如果要按順序排列日期,只需對數組進行排序即可。
創建一個僅列出一年中所有日期的表並不算過大; 它稱為幫助程序表 ,可以使此查詢(以及許多類似的查詢)非常容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.