php - SQL неделя года () до строки / даты - PullRequest
1 голос
/ 28 декабря 2011

Я запускаю запрос к базе данных 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, например. Неделя 5-11 / 12/2011, посещения: XXXX.

Какие функции вы могли использовать раньше? Я пытался, но без удачи.

Является ли мой SQL-запрос правильным способом сделать это? Предполагая, что я правильно запрашиваю базу данных для того, что я пытаюсь выполнить, есть ли способ преобразовать число недели в интервал дня / даты?

Мне также интересно, что произойдет, если неделя длится от двух месяцев до двух лет.

1 Ответ

2 голосов
/ 28 декабря 2011

Допущения:

  • Дата, которую вы хотите отобразить, - это неделя понедельника для этой недели
  • Ваш основной вывод - 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 команда, чтобы обеспечить соответствие между датами текущего и прошлого года.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...