获取每个当天的活动总数

时间:2012-02-13 14:35:16

标签: mysql range unix-timestamp

如何通过UNIX时间戳获取当天登记的当前事件的数量,例如,2012年2月17日有2个事件,2012年2月19日有1个事件。它应该返回如下行:

Array 
(
    [0] => stdClass Object
        (
           [event_id] => 4
           [total_events] => 2
        )

    [1] => stdClass Object
        (
           [event_id] => 18
           [total_events] => 2
        )

    [2] => stdClass Object
        (
           [event_id] => 19
           [total_events] => 1
        )
)

前两项安排在彼此的同一天(2月17日),最后一项是在2月19日,同一天没有安排其他活动。

我试过这个方法,但它返回了这个:

Array
(
    [0] => stdClass Object
        (
            [event_id] => 1
            [total_events] => 1
        )

    [1] => stdClass Object
        (
            [event_id] => 2
            [total_events] => 1
        )

    [2] => stdClass Object
        (
            [event_id] => 3
            [total_events] => 1
        )

)

这是我到目前为止所做的以下SQL,没有取得好成绩:

SELECT events.event_id,
       SUM(IF(DATE_FORMAT(FROM_UNIXTIME(events.event_starts), '%y %m %d') = DATE_FORMAT(FROM_UNIXTIME(events.event_ends), '%y %m %d'), 1, 0)) AS total_events

FROM
(
    scheduled_events events
)
WHERE ( events.event_starts >= 1328486400 AND events.event_ends <= 1329695940 )
GROUP BY events.event_id

两个UNIX时间戳的范围从下周的2月13日上午12:00到2月19日星期日晚上11点59分。

如果在下一个事件的当天发生事件,我如何检索返回一周中每一天的事件数的事件数。

1 个答案:

答案 0 :(得分:0)

这应该让你开始。它应该返回两个时间戳内的每个event_id和同一天开始的所有其他event_id的COUNT

SELECT e1.event_id,
       COUNT(DISTINCT e2.event_id)
FROM   scheduled_events AS e1
   INNER JOIN scheduled_events AS e2
       ON  e1.event_id!=e2.event_id 
           AND DATE(FROM_UNIXTIME(e1.event_starts))=DATE(FROM_UNIXTIME(e2.event_starts))
WHERE ( e1.event_starts >= 1328486400 AND e1.event_ends <= 1329695940 )
GROUP BY e1.event_id