2010-11-07 94 views
1

我在我的数据库中有一对多关系,其中一个事件可能有多个日期。我需要找到所有没有比当前日期更大的事件的事件(即已经过期的事件)。查询多个日期不大于当前日期

我使用下面的选择与将来的日期所有这些事件:

SELECT events.id AS id,events.picture,events.name,events.venue,events.city 
FROM events,event_dates 
WHERE event_dates.start_date >= DATE(NOW()) 
GROUP BY events.id ORDER BY events.id DESC 

我不是很聪明试图扭转这一点,并获得所有日期< DATE(NOW())NOT event_dates.start_date >= DATE(NOW())

事件

哪个(或者哪个都不)更接近这个想法。

回答

1

用途:

SELECT e.id, 
     e.picture, 
     e.name, 
     e.venue, 
     e.city 
    FROM EVENTS e 
WHERE NOT EXISTS(SELECT NULL 
        FROM EVENT_DATES ed 
        WHERE ed.event_id = e.id 
        AND ed.start_date >= CURRENT_DATE()) 
+0

你对这些疑问的了解展示了我一如既往的无知 – kalpaitch 2010-11-07 22:37:32

2

你可以简单地做一个地方不一样

SELECT * FROM events WHERE events.ID NOT IN 
(
your current query here (but only select the id) 
) 
0

我知道这是有点晚了,但我不喜欢子查询,我想知道为什么这可能不只是做与一个左连接?

SELECT events.id为ID,events.picture,events.name,events.venue,events.city FROM事件 LEFT JOIN event_dates ON events.id = event_dates.event_id AND event_dates.start_date> = NOW() WHERE event_dates.ID为空 ORDER BY events.id DESC;

关键是将日期测试放入JOIN条件而不是WHERE子句中。我相信它会更有效率,特别是如果您在event_dates start_date列上有索引?