php - 一年中的SQL周()到字符串/日期

时间:2011-12-28 03:04:51

标签: mysql date php

我针对MySQL数据库运行查询,以获得按周分组的总访问次数。 该表的结构是:

|ID (int) | SESSION (char) | TIMESTAMP (datetime) |

我的查询如下所示: 'SELECT COUNT(session), WEEKOFYEAR(timestamp) FROM stats GROUP BY WEEKOFYEAR(timestamp) ORDER BY timestamp ASC';

所以我得到一个周数的数组,例如40,41,45等,以及视图数。

如何将其转换为可读日期(使用PHP)?说“周数40 - 某事:2000次访问”是不切实际的。

我正在寻找StartDate-EndDate / Month / Year形式的东西,例如。 2011年第11-11 / 12周,访问量:XXXX。

您以前可能使用过的任何功能?我试过但没有运气。

我的SQL查询是否是正确的方法?假设我正在为我正在尝试完成的内容正确查询数据库,有没有办法将周数转换为日期/日期范围?

我也想知道如果一个星期跨越两个月甚至两年会发生什么。

1 个答案:

答案 0 :(得分:2)

假设:

  • 您要显示的日期是该周的星期一星期日
  • 您的主要输出是Week <week number>-<monday date of week>, Visits: <count>.
  • 您知道足够的PHP能够提取列Phrase

以下SQL命令应显示每年的每周会话数,一年中的一周以及您想要的短语:

SELECT COUNT(session) AS VisitCount
    , WEEKOFYEAR(timestamp) AS WeekOfYear_Value
    , MAKEDATE(
        CASE 
            WHEN WEEKOFYEAR(timestamp) = 52 
                THEN YEAR(timestamp)-1 
            ELSE YEAR(timestamp) 
        END, (WEEKOFYEAR(timestamp) * 7)-4) AS DateOfWeek_Value
    , CONCAT('Week ', WEEKOFYEAR(timestamp)
        , '-', MAKEDATE(
            CASE 
                WHEN WEEKOFYEAR(timestamp) = 52 
                    THEN YEAR(timestamp)-1 
                ELSE YEAR(timestamp) 
            END, (WEEKOFYEAR(timestamp) * 7)-4) -- Monday
        , ', Visits: ' , COUNT(session), '.') AS Phrase
FROM stats
GROUP BY WEEKOFYEAR(timestamp)
ORDER BY timestamp ASC

尝试使用现有数据。

[编辑:其他代码更改]

为了得到星期天的输出:

SELECT COUNT(session) AS VisitCount
    , WEEKOFYEAR(timestamp) AS WeekOfYear_Value
    , CONCAT('Week ', WEEKOFYEAR(timestamp)
        , '-', MAKEDATE(
            CASE 
                WHEN WEEKOFYEAR(timestamp) = 52 
                    THEN YEAR(timestamp)-1 
                ELSE YEAR(timestamp) 
            END, 
            CASE 
                WHEN WEEKOFYEAR(timestamp) = 52 
                    THEN (WEEKOFYEAR(timestamp) * 7)+3
                ELSE (WEEKOFYEAR(timestamp) * 7)+2
            END
            )
    , ', Visits: ' , COUNT(session), '.') AS Phrase
FROM stats
GROUP BY WEEKOFYEAR(timestamp)
ORDER BY timestamp ASC

另请注意,此最后一次更新包含CASE命令中的另一个makedate,以确保当前和去年值之间的日期保持一致。