我有两个表:一个包含事件,一个包含事件的计划:
events(id,name,description)
schedules(id,eventid,date,time) // date is a DATE, time is a TIME
在单个mysql查询中,通过下一个日期从日程表中排序所有事件的最高效方法是什么?
(澄清,“下一个日期”是指第一个日期>> now)
答案 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