为什么这个MySQL查询不会按过去的日期返回结果?

时间:2011-09-12 16:43:02

标签: 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是一个日期类型,如果这有任何区别。有什么想法吗?

1 个答案:

答案 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&lt;的行?现在()?检查一下。只需删除该语句,执行以下操作:

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

你得到任何结果吗?