2011-09-12 87 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 

你有什么结果吗?

相关问题