我针对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查询是否是正确的方法?假设我正在为我正在尝试完成的内容正确查询数据库,有没有办法将周数转换为日期/日期范围?
我也想知道如果一个星期跨越两个月甚至两年会发生什么。
答案 0 :(得分:2)
Week <week number>-<monday date of week>, Visits: <count>.
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
,以确保当前和去年值之间的日期保持一致。