Архив документов

maximum7

Новичок
Архив документов

Добрый день,

Пытаюсь сделать архив документов. Есть таблица с документами th_documents, в которой дата создания документов храниться в DokStart. Нужно выбрать документы, сгруппировав по годам, после чего дополнительно нужно посчитать количество документов по месяцам. Плюс ко всему если в каком то месяце ничего не опубликовано всё равно нужно, чтобы месяц выводился. Пример того, что пытаюсь сделать: http://www.komodomedia.com/blog/ внизу страницы. Как такое реализовать?

PHP:
$query = $DB->Query("
            SELECT
                YEAR(FROM_UNIXTIME(DokStart)) AS `year`,
                COUNT(*) AS sum
            FROM th_documents
            WHERE DokStatus != 0 
            GROUP BY `year`
            ORDER BY `year` DESC
        ");

        
        while ($res = $query->FetchRow())
        {        
        
            $qu = $DB->Query("
            SELECT
                DATE_FORMAT(FROM_UNIXTIME(DokStart), '%m') as month,
                DATE_FORMAT(FROM_UNIXTIME(DokStart), '%Y') as goods,
                COUNT(*) AS nums_month
            FROM th_documents
            WHERE
            RubrikId = '2'
              AND DokStatus != 0
            AND DATE_FORMAT(FROM_UNIXTIME(DokStart), '%Y') = '".$res->year."'
            GROUP BY `month`
            ORDER BY DokStart ASC
            ");
            
            while ($res2 = $qu->FetchRow())
            {
                $res2->month = str_ireplace($mid, $months, $res2->month);
                array_push($dd2, $res2);
            }
        
            $res->months = $dd2;
            array_push($dd, $res);
        }
но в результате:
PHP:
Array
(
    [0] => stdClass Object
        (
            [year] => 2010
            [sum] => 68
            [months] => Array
                (
                    [0] => stdClass Object
                        (
                            [month] => Январь
                            [goods] => 2010
                            [nums_month] => 17
                        )

                    [1] => stdClass Object
                        (
                            [month] => Февраль
                            [goods] => 2010
                            [nums_month] => 23
                        )

                    [2] => stdClass Object
                        (
                            [month] => Март
                            [goods] => 2010
                            [nums_month] => 16
                        )

                    [3] => stdClass Object
                        (
                            [month] => Апрель
                            [goods] => 2010
                            [nums_month] => 12
                        )

                )

        )

    [1] => stdClass Object
        (
            [year] => 2009
            [sum] => 181
            [months] => Array
                (
                    [0] => stdClass Object
                        (
                            [month] => Январь
                            [goods] => 2010
                            [nums_month] => 17
                        )

                    [1] => stdClass Object
                        (
                            [month] => Февраль
                            [goods] => 2010
                            [nums_month] => 23
                        )

                    [2] => stdClass Object
                        (
                            [month] => Март
                            [goods] => 2010
                            [nums_month] => 16
                        )

                    [3] => stdClass Object
                        (
                            [month] => Апрель
                            [goods] => 2010
                            [nums_month] => 12
                        )

                    [4] => stdClass Object
                        (
                            [month] => Январь
                            [goods] => 2009
                            [nums_month] => 36
                        )

                    [5] => stdClass Object
                        (
                            [month] => Февраль
                            [goods] => 2009
                            [nums_month] => 38
                        )

                    [6] => stdClass Object
                        (
                            [month] => Март
                            [goods] => 2009
                            [nums_month] => 30
                        )

                    [7] => stdClass Object
                        (
                            [month] => Апрель
                            [goods] => 2009
                            [nums_month] => 22
                        )

                    [8] => stdClass Object
                        (
                            [month] => Май
                            [goods] => 2009
                            [nums_month] => 22
                        )

                    [9] => stdClass Object
                        (
                            [month] => Июнь
                            [goods] => 2009
                            [nums_month] => 13
                        )

                    [10] => stdClass Object
                        (
                            [month] => Июль
                            [goods] => 2009
                            [nums_month] => 19
                        )

                    [11] => stdClass Object
                        (
                            [month] => Август
                            [goods] => 2009
                            [nums_month] => 11
                        )

                    [12] => stdClass Object
                        (
                            [month] => Сентябрь
                            [goods] => 2009
                            [nums_month] => 10
                        )

                    [13] => stdClass Object
                        (
                            [month] => Октябрь
                            [goods] => 2009
                            [nums_month] => 14
                        )

                    [14] => stdClass Object
                        (
                            [month] => Ноябрь
                            [goods] => 2009
                            [nums_month] => 16
                        )

                    [15] => stdClass Object
                        (
                            [month] => Декабрь
                            [goods] => 2009
                            [nums_month] => 18
                        )

                )
 

Fortop

Новичок
Получаем все записи по-месячно, с указанием года и месяца.

Формируем массив из результатов вида
$data[year][month]
(отдельно тут же можно получить и суммы за год)

Затем берем список всех месяцев от начальной до конечной даты.
И выводим данные:
PHP:
for($i = годначала, $k = месяц_начала;
    $i < год_конца || $k < месяц_конца;
    (++$k > 12 ? ($i++ ? $k=1:null):null)) {
    if (isset($data[$i][$k])) {
        var_dump($data[$i][$k];
    } else {
        echo 'empty';
    }
}
 
Сверху