查询将多日项目作为日常项目返回

时间:2015-04-28 15:53:15

标签: mysql sql

我有一个计划页面列出了用户必须参加的活动,但我希望每天都会列出超过几天的活动。可能是一个常见问题:)

SELECT * FROM events ORDER BY date(然后循环结果并在PHP中按日分组)仅在开始日列出多日事件。

是否存在一个直接的SQL查询,它会为一个事件跨越的每一天返回一个单独的行,因此我可以得到一个结果集,如下所示,其中event_id 3跨越四月的21到23之间?< / p>

event_id | date_starts | [eventually other columns...] 
2          2015-04-15
3          2015-04-21
3          2015-04-22 
3          2015-04-23
5          2015-04-28

1 个答案:

答案 0 :(得分:0)

您需要一个日历或数字表。例如,如果您知道最长的事件是三天,那么您可以这样做:

select e.event_id, e.startdate + interval n.n day as thedate
from events e join
     (select 0 as n union all select 1 union all select 2) n
    on e.startdate + interval n.n day <= e.enddate;

如果最大天数不是太大,这将很有效,因此您可以轻松创建n子查询。