2011-09-12 84 views
0

我有一個事件表,所有事件都有一個事件開始日期。我想要做的是創建一個事件檔案並顯示所有已經來去的事件。爲什麼這個MySQL查詢不會返回過去的日期結果?

現在由於某種原因,我可以得到尚未通過的事件的結果,但是當我嘗試選擇舊事件時,我得到一個空的結果。

這裏是我的查詢:

SELECT wp_eventscalendar_main.eventTitle, wp_eventscalendar_main.eventDescription, wp_eventscalendar_main.eventStartDate, wp_eventscalendar_main.postID, wp_postmeta.post_id, wp_postmeta.meta_key, wp_postmeta.meta_value 
    FROM wp_eventscalendar_main, wp_postmeta 
    WHERE wp_eventscalendar_main.eventStartDate < NOW() AND wp_postmeta.post_id = wp_eventscalendar_main.postID AND wp_postmeta.meta_key = '_thumbnail_id' 
    ORDER BY wp_eventscalendar_main.eventStartDate ASC 
    LIMIT 10 

的eventStartDate是日期類型,如果有什麼差別。有任何想法嗎?

+3

如果您完全取消日期限制,您是否會看到舊事件? –

+2

您的代碼沒有問題。你是否首先嚐試從一個聲明開始你的位置?看看它是否返回結果。然後添加下一個(post_id)。最後再次檢查結果,如果仍然看到結果,則添加where(eventstartdate JonH

+0

我已經解決了人。感謝您提醒我在恐慌之前回到基礎知識! –

回答

0

首先,你應該嘗試使用INNER JOIN而不是CROSS JOINS。你用INNER JOIN關鍵字來做到這一點。而且,我建議開始使用別名,它更具可讀性。

所以,這樣的事情:

SELECT m.eventTitle, m.eventDescription, m.eventStartDate, m.postID, p.post_id, p.meta_key, p.meta_value 
FROM wp_eventscalendar_main m INNER JOIN wp_postmeta p 
ON (m.postID = p.post_id) 
WHERE m.eventStartDate < NOW() 
AND p.meta_key = '_thumbnail_id' 
ORDER BY m.eventStartDate ASC 
LIMIT 10 

現在,你必須滿足行eventStartDate < NOW()?檢查一下。只要刪除該聲明,做這樣的事情:

SELECT m.eventTitle, m.eventDescription, m.eventStartDate, m.postID, p.post_id, p.meta_key, p.meta_value 
FROM wp_eventscalendar_main m INNER JOIN wp_postmeta p 
ON (m.postID = p.post_id) 
WHERE 
p.meta_key = '_thumbnail_id' 
ORDER BY m.eventStartDate ASC 
LIMIT 10 

你有什麼結果嗎?

相關問題