2012-06-08 49 views
3

我試圖從數據庫中選擇以獲取日期落入的「活動」這個月。到目前爲止,我已經成功地抓取了當前月份內開始或結束的行。我現在需要做的是選擇從一個月開始到行結束幾個月的行(EG:這是今年的第三個月,並且有一個「活動」從第一個月開始直到5。其他例如有一種「運動」,從2012年持續到2013從當前日期在開始日期和結束日期之間的MySql中獲取行(檢查當前日期是否在開始日期和結束日期之間)

我希望有一些方法通過MySQL來選擇其中一個capaign可以運行所有行。如果不是,我應該抓取數據庫中的所有數據,只顯示當月運行的數據。

我已經做了一個函數,顯示數組內的每個日期之間的所有天,這被稱爲「dateRange」。我還創建了另一個顯示廣告系列運行時間爲「runTime」的天數。

選擇所有(顯然)

$result = mysql_query("SELECT * FROM campaign"); 

選擇從這個月開始

$result = mysql_query("SELECT * FROM campaign WHERE YEAR(START) = YEAR(CURDATE()) AND MONTH(START) = MONTH(CURDATE())"); 

選擇結束本月

$result = mysql_query("SELECT * FROM campaign WHERE YEAR(END) = YEAR(CURDATE()) AND MONTH(END) = MONTH(CURDATE()) LIMIT 0 , 30"); 

代碼示例

while($row = mysql_fetch_array($result)) 
{ 
$dateArray = dateRange($row['start'], $row['end']); 

echo "<h3>" . $row['campname'] . "</h3> Start " . $row['start'] . "<br /> End " . $row['end']; 
echo runTime($row['start'], $row['end']); 
print_r($dateArray); 
} 

在問候的日期,MySql數據庫僅持有啓動活動的日期和結束日期。

回答

4

檢測的日期/時間的重疊,你可以做這樣的事情:

//range of dates to get overlap. means if any row in the database has 
//a day in its start/end range that falls between these days 
$startDate = '2012-06-01'; 
$endDate = '2012-06-30'; 

$sql = "SELECT * 
    FROM campaign 
    WHERE 
     `start` < '$endDate' 
     AND `end` > '$startDate'"; 

會找到運動,具有了$的startDate和結束日期$介於任何一天任何行。這也適用於活動的所有事件...:

  1. $的startDate前開始和結束前$結束日期(日期範圍之間結束日期)$的startDate後
  2. 開始和結束日期$結束之前(包括啓動和日期範圍之間結束)$的startDate之前
  3. 開始和結束後$結束日期(開始和結束涵蓋日期範圍)$的startDate後
  4. 開始和結束後$結束日期(開始日期範圍之間日期)

一個同樣,這個查詢就像$ startDate和$ endDate一樣。這意味着,如果某件事從5月31日開始(基於上述示例日期)並在6月1日結束,則不包括在內。如果您希望日期包含在內,則可以將><更改爲>=<=以包括開始日期和結束日期。

+0

這是完美的,正是我所希望的!非常感謝。 –

相關問題