【问题标题】:Query to return multi-day items as daily items查询以将多日项目作为日常项目返回
【发布时间】:2015-04-28 23:56:05
【问题描述】:

我有一个时间表页面,其中列出了用户必须参与的活动,但我希望跨越多天的活动在每一天都列出。可能是一个常见问题:)

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

是否有一个直截了当的 SQL 查询,它会为一个事件跨越的每一天返回一个单独的行,这样对于 event_id 3 跨越 4 月 21 日至 23 日的场景,我可以获得如下所示的结果集?

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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

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

    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 子查询。

    【讨论】:

    • 你能解释一下吗?另外,除非我先查询和计算,否则我不知道事件的最大天数。知道最长的事件是您的解决方案的要求吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多