簡體   English   中英

打印表中不存在的行?

[英]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 

這與關於SO的另一個問題非常相似。 普遍的共識似乎是:

  1. 在程序的應用程序層中填寫空白日期。
  2. 創建一個臨時表,用日期填充它,然后加入臨時表。

最好的選擇是#1-它的卷積最少,並且開銷最低。

在相關日期范圍內選擇。 然后遍歷日期范圍,以查看當前行是否匹配。 如果不是,則輸出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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM