MySQL:按计划中的下一个日期排序

时间:2013-10-17 11:33:27

标签: mysql schedule

我有两个表:一个包含事件,一个包含事件的计划:

events(id,name,description)

schedules(id,eventid,date,time) // date is a DATE, time is a TIME

在单个mysql查询中,通过下一个日期从日程表中排序所有事件的最高效方法是什么?

  

(澄清,“下一个日期”是指第一个日期>> now)

2 个答案:

答案 0 :(得分:0)

select 
1,e.name,e.description,s.date,s.time
from
events e
inner join schedules s on e.id = s.eventid
where TIMESTAMP(s.date,s.time) > CURRENT_TIMESTAMP()
union
select 
2,e.name,e.description,s.date,s.time
from
events e
inner join schedules s on e.id = s.eventid
where TIMESTAMP(s.date,s.time) <= CURRENT_TIMESTAMP()
order by 1, TIMESTAMP(s.date,s.time) asc

答案 1 :(得分:0)

LEFT JOIN如果您需要所有事件,即使没有安排NEXT DATE也是如此。如果您需要NEXT DATE的活动,请使用INNER JOIN

select e.id,e.name,e.description, sc.nextDate
from events
left join 
  (
   select s.eventid,
       min(TIMESTAMP(s.date,s.time)) nextDate
   from schedules s
        where TIMESTAMP(s.date,s.time)>NOW() 
   group by s.eventid
  ) sc on e.id=sc.eventid
order by sc.nextDate