我有 2 张桌子:一张有活动,一张有活动时间表:
events(id,name,description)
schedules(id,eventid,date,time) // date is a DATE, time is a TIME
在单个 mysql 查询中获取所有事件的最有效方法是什么,按时间表中的下一个日期排序?
(为了澄清,“下一个日期”是指第一个日期>现在)
即使没有安排下一个日期,如果您需要所有事件,请左加入。如果您需要 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
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