2010-09-09 39 views
1

目前我有兩個表和下面的SQL語句,其正確獲取以他們在event_dates表日期排序事件表中的項目:MYSQL檢索結果,其中日期=下週末

SELECT * FROM events, event_dates 
WHERE events.id=event_dates.event_id 
    AND events.preview=0 AND event_dates.start_date>=now() 
ORDER BY event_dates.start_date ASC,event_dates.start_time ASC LIMIT 3 

現在我想添加額外的AND以確保只設置下週末的事件。日期列採用標準的mysql日期格式(YYYY-MM-DD)。被困在這一點上。乾杯。

+0

請儘可能不要混合使用PHP和SQL。首先你會迷惑自己。說到SQL查詢,只使用SQL。 PHP對於查詢mening很少,它只進行字符串操作。 – 2010-09-09 14:07:19

+0

如果您在星期六查詢,該怎麼辦?星期日? (細節,鮑勃!) – jensgram 2010-09-09 14:07:28

+0

@Col。一般來說,在這個問題上,我同意你的看法,我認爲這是一個特殊情況,一個簡單的PHP初始計算(比較@ spudley的答案)會給出一個更具可讀性的查詢(這個查詢必須包含很多的邏輯來做同樣的事情)。 – jensgram 2010-09-09 14:10:06

回答

4

使用PHP的strtotime()來獲得週末的開始和結束時間戳記:

$we_start=strtotime('next saturday'); 
$we_end=strtotime('next monday')-1; 

然後做一個SQL查詢來尋找它們之間的時間戳。

select * from mytable where UNIX_TIMESTAMP(mydatefield) BETWEEN $we_start AND $we_end 

希望有幫助。

+0

+1比我想到的要好:)儘管'BETWEEN'的參數順序很重要(http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between)所以你應該在查詢數據庫之前先執行'$ real_we_start = min($ we_start,$ we_end)'和'$ real_we_end = max($ we_start,$ we_end)'。 – jensgram 2010-09-09 14:04:17

+0

當然,那是完美的 – kalpaitch 2010-09-09 14:08:41

+2

或者,您可以:'$ we_start = strtotime('next saturday');'和'$ we_end = strtotime('next monday',$ we_start)-1;'。我現在很安靜:) – jensgram 2010-09-10 05:33:44

相關問題