2013-07-22 111 views
0

我有一個存儲以下數據的MySQL表:獲取由記錄間隔

id_event INT(10) 
start_date DATE() 
end_date DATE() 

我的目標是要表明包括在間隔betweeb之間的日期都id_events:$start$sto

我「已經到目前爲止已經試過:

SELECT * FROM events WHERE $start >= start_date AND $end <= end_date; 

但問題是,這可能是一些事件,輸入$start之前啓動,並結束之後$end並沒有顯示。

我敢肯定,這可能是很容易的,但我stucked與此對最後2天

在此先感謝

+0

當然,如果一個事件開始之前和結束後,它不應該顯示?如果你的邏輯是一個事件可能已經在'$ start'之前開始並且在'$ end'之後結束,那麼你是否包含比當前更早的記錄?您的目標是匹配佔用該時間表的所有記錄嗎? – BenM

+0

所以你想要在'$ start'之後開始並在'$ end'之前結束的事件嗎? – yair

回答

0

嘗試

SELECT * FROM events WHERE start_date >= '$start' AND end_date <= '$end';

+0

對不起,我在錯誤的信息中附加了圖表。道歉我,但我不能刪除:( –

0

第一關,您需要確保$start$end格式正確。它應該是:'YYYY-mm-dd',例如:'2013-07-22'

其次,你的邏輯是有缺陷的。 $start >= start_datestart_date <= $start相同。這意味着什麼或之前輸入日期爲$start

最後,你需要在你的查詢中引用你的值,你的日期應該是字符串。

SELECT * FROM events WHERE start_date >= '$start' AND end_date <= '$end'; 
+0

出於興趣,在那裏的操作數的順序的任何特定原因?是否有顯着的性能提升? – BenM

+0

@BenM:這就是他的方式,我認爲可能有一個問題與他的邏輯。 –

+0

謝謝,還沒有檢查編輯。 – BenM

0

試試這個:

SELECT * FROM events 
WHERE $start <= end_date and $end >= start_date; 

enter image description here

0

這在很大程度上取決於什麼是在$開始和結束$。 我認爲這來自PHP,對吧?

我想你需要先轉換無論是在PHP變量SQL DATE類型,使用STR_TO_DATE功能(http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

然後,它們使用了正確的格式,在運行類似以下的東西:

SELECT * FROM events WHERE STR_TO_DATE('$start','%d-%m-%Y') >= start_date AND STR_TO_DATE('$end','%d-%m-%Y') <= end_date;