Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

2 страниц V   1 2

Вывести статистику

Статус пользователя Ermak
сообщение 4.3.2015, 8:43
Сообщение #1


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Подскажите как вывести статистики за определенный промежуток времени и свернуть по пользователю?
Пример:


user | user2 | DATA
---------------------
Ermak | Stepa | 2015-02-02
---------------------
Ermak | Petya |2015-02-03
-----------------------
Ermak | Vova |2015-03-02
-----------------------
Ermak | Sema |2015-03-03
-----------------------
Stas | Gena |2015-02-02
---------------------
Stas | Gosha|2015-03-02
---------------------

Получаеться
user | Кол-во | DATA
---------------------
Ermak | 2 | Февраль
---------------------
Stas | 1 | Февраль
---------------------
Ermak | 2 | Март
---------------------
Stas | 1 | Март

Заранее спасибо!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Ermak
сообщение 4.3.2015, 17:21
Сообщение #2


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Выводит почему то только колонку USER

Код
<?php
//Подключаем базу данных
    include("configs.php");
    $link=mysql_connect($host,$login,$password);
    mysql_select_db($db,$link);
    
$months = Array(
  '01' => 'январь',
  '02' => 'февраль',
  '03' => 'март',
  '04' => 'апрель',
  '05' => 'май',
  '06' => 'июнь',
  '07' => 'июль',
  '08' => 'август',
  '09' => 'сентябрь',
  '10' => 'октябрь',
  '11' => 'ноябрь',
  '12' => 'декабрь'
  );

// SQL query
    $query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, `tek_data`
        FROM `action_user`
        GROUP BY `friend_name`, MONTH(`tek_data`)";
    $q=mysql_query($query);

// table begin
    echo '<table>
            <tr>
                <td><b>User</b></td>
                <td><b>Count</b></td>
                <td><b>Month</b></td>
            </tr>';
    while($row = mysql_fetch_assoc($q))
    {
    echo '<tr>
            <td>' . $row['friend_name'] . '</td>
            <td>' . $row['user_name'] . '</td>
            <td>' . $month[$row['tek_data']] . '</td>
        </tr>';
}
echo '</table>';
// table end
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 4.3.2015, 17:31
Сообщение #3


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Подправил, выводит user и количество, дату не выводит почему то
Код
<?php
//Подключаем базу данных
    include("configs.php");
    $link=mysql_connect($host,$login,$password);
    mysql_select_db($db,$link);
    
$months = Array(
  '01' => 'январь',
  '02' => 'февраль',
  '03' => 'март',
  '04' => 'апрель',
  '05' => 'май',
  '06' => 'июнь',
  '07' => 'июль',
  '08' => 'август',
  '09' => 'сентябрь',
  '10' => 'октябрь',
  '11' => 'ноябрь',
  '12' => 'декабрь'
  );

// SQL query
    $query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, `tek_data`
        FROM `action_user`
        GROUP BY `friend_name`, MONTH(`tek_data`)";
    $q=mysql_query($query);
    
// table begin
    echo '<table class="bordered">
            <tr>
                <th style="text-align: center;"><strong>Пользователь</strong></th>
                <th style="text-align: center;"><strong>Количество</strong></th>
                <th style="text-align: center;"><strong>Месяц</strong></th>
            </tr>';
    while($row = mysql_fetch_assoc($q))
    {
    echo '<tr>
            <td><h6>' . $row['friend_name'] . '</h6></td>
            <td><h6>' . $row['count'] . '</h6></td>
            <td><h6>' . $month[$row['data']] . '</h6></td>
        </tr>';
}
echo '</table>';
// table end
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 4.3.2015, 17:48
Сообщение #4


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Fred Perry, а что там не так?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 4.3.2015, 17:56
Сообщение #5


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Дату я получаю так $tek_data = date("Y-m-d");

Fred Perry, это я заметил и исправил но все равно не выводит
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 4.3.2015, 18:23
Сообщение #6


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
У тебя tek_data это дата целиком, а нужно только значение месяца, замени
Код
// SQL query
    $query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, `tek_data`
        FROM `action_user`
        GROUP BY `friend_name`, MONTH(`tek_data`)";
на
Код
// SQL query
    $query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, month(`tek_data`) as `tek_data`
        FROM `action_user`
        GROUP BY `friend_name`, MONTH(`tek_data`)";

Еще сильно смущает метод определения массива месяцев, мне кажется лучше вот так
Код
$months = Array(
  1 => 'январь',
  2 => 'февраль',
  3 => 'март',
  4 => 'апрель',
  5 => 'май',
  6 => 'июнь',
  7 => 'июль',
  8 => 'август',
  9 => 'сентябрь',
  10 => 'октябрь',
  11 => 'ноябрь',
  12 => 'декабрь'
  );


Отредактировал: UnrealGame, - 4.3.2015, 18:24
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 4.3.2015, 22:11
Сообщение #7


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

UnrealGame, Спасибо большое, все получилось, увидел в чем была ошибка. А по неделям еще можно сделать?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 5.3.2015, 11:37
Сообщение #8


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Полная аналогия с группировкой по месяцу:
Код
// SQL query
    $query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, month(`tek_data`) as `tek_data_month`, week(`tek_data`) AS `tek_data_week`
        FROM `action_user`
        GROUP BY `friend_name`, week(`tek_data`)";

Правда тут еще не учтён год. Но в примере с месяцами была эта же проблема.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 5.3.2015, 13:11
Сообщение #9


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

UnrealGame, что то не чего не выводит. А как еще год добавить
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 5.3.2015, 13:40
Сообщение #10


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Год учесть можно вот так:
Код
// SQL query
    $query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, month(`tek_data`) as `tek_data_month`, week(`tek_data`) AS `tek_data_week`
        FROM `action_user`
        GROUP BY `friend_name`, CEIL(UNIX_TIMESTAMP(login_date)/604800)";


Берем дату в формате TIMESTAMP и делим на 604800 (60*60*24*7 - количество секунд в неделе). Функцией CEIL оставляем только целое от деление.

В моем примере я переименовал колонки, может из-за этого проблемы с выводом.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 5.3.2015, 14:07
Сообщение #11


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

UnrealGame, Почему когда вывожу tek_data_week пишет Сентябрь, а когда tek_data_month пишет Март, хотя в базе Март

Код
"SELECT `friend_name`, COUNT(`user_name`) AS `count`, month(`tek_data`) as `tek_data_month`, week(`tek_data`) AS `tek_data_week`
        FROM `action_user`
        GROUP BY `friend_name`, week(`tek_data`)";

С годом так и не понял
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 5.3.2015, 15:58
Сообщение #12


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
В в столбце tek_data_week содержится номер недели в году (от 0 до 53 - всего в году 52 недели). Если хочешь показать месяц, используй столбец tek_data_month.

С точки зрения документации по запросам (MySQL) хороший ресурс: MySQL function week
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 5.3.2015, 21:45
Сообщение #13


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

UnrealGame, Спасибо за ссылку, я понял теперь как выводить. Можете подсказать как вывести месяц в шапку

user | Февраль 2015 | Март 2015
------------------------------------
Ermak| 2 | 2
------------------------------------
Stas | 1 | 1

Вот код
Код
<?php
//Подключаем базу данных
    include("configs.php");
    $link=mysql_connect($host,$login,$password);
    mysql_select_db($db,$link);
    
$months = Array(
  1 => 'январь',
  2 => 'февраль',
  3 => 'март',
  4 => 'апрель',
  5 => 'май',
  6 => 'июнь',
  7 => 'июль',
  8 => 'август',
  9 => 'сентябрь',
  10 => 'октябрь',
  11 => 'ноябрь',
  12 => 'декабрь'
  );
  
  $week = Array(
  1 => 'Первая неделя',
  2 => 'Вторая неделя',
  3 => 'Третья неделя',
  4 => 'Четвертая неделя',

  );

// SQL query
//   $query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, month(`tek_data`) as `tek_data`
//        FROM `action_user`
//        GROUP BY `friend_name`, MONTH(`tek_data`)";

    $query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, month(`stat_date`) AS `stat_date_month`, week(`stat_date`) AS `stat_date_week`, YEAR(`stat_date`) AS `stat_date_year`
        FROM `action_user`
        GROUP BY `friend_name`, MONTH(`stat_date`), WEEK('stat_date'), YEAR('stat_date')";
    $q=mysql_query($query);
    
// table begin
    echo '<table class="bordered">
            <tr>
                <th style="text-align: center;"><strong>Пользователь</strong></th>
                <th style="text-align: center;"><strong>Количество</strong></th>
                <th style="text-align: center;"><strong>Месяц</strong></th>
                <th style="text-align: center;"><strong>Неделя</strong></th>
                <th style="text-align: center;"><strong>Год</strong></th>
            </tr>';
    while($row = mysql_fetch_assoc($q))
    {
    echo '<tr>
            <td><h6>' . $row['friend_name'] . '</h6></td>
            <td><h6>' . $row['count'] . '</h6></td>
            <td><h6>' . $months[$row['stat_date_month']] . '</h6></td>
            <td><h6>' . $row['stat_date_week'] . '</h6></td>
            <td><h6>' . $row['stat_date_year'] . '</h6></td>
        </tr>';
}
echo '</table>';
// table end
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 5.3.2015, 22:41
Сообщение #14


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Предложенный запрос не подходит так как в нем берется номер недели в году, а не номер недели в месяце, подсчёты будут неточными (если конечно это вообще принципиально)
Код
    $query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, month(`stat_date`) AS `stat_date_month`, week(`stat_date`) AS `stat_date_week`, YEAR(`stat_date`) AS `stat_date_year`
        FROM `action_user`
        GROUP BY `friend_name`, MONTH(`stat_date`), WEEK('stat_date'), YEAR('stat_date')";
    $q=mysql_query($query);

Мне кажется более корректно будет считать вот такой запрос:
Код
    $query ="SELECT `friend_name`, COUNT(`user_name`) AS `count`, month(`stat_date`) AS `stat_date_month`, CEIL(day(stat_date)/7) AS `stat_date_week`, YEAR(`stat_date`) AS `stat_date_year`
        FROM `action_user`
        GROUP BY `friend_name`, MONTH(stat_date), CEIL(day(stat_date)/7), YEAR(stat_date)";
    $q=mysql_query($query);


Еще один нюанс, недель в месяце выйдет 5, а не 4.

Я не смогу написать сразу код без ошибок, опечаток и оплошностей. Для меня разработка это смешанный процесс написания кода и параллельной отладки.

Если говорить о логической последовательности действий для того чтобы решить поставленную задачу. Нужно пройтись по всем полученным записям и сформировать 3 временных массива:
- массив уникальных дат,
- массив уникальных пользователей,
- массив в котором будет хранится количество посещений для определенного пользователя в определенную дату.

Можно все эти массивы получить используя запросы к базе.

Использую первый массив, можно сформировать шапку таблицы. Далее пройдясь вложенным циклом foreach по первым двум массивам, вывести значение с третьего.

Отредактировал: UnrealGame, - 5.3.2015, 22:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 5.3.2015, 23:07
Сообщение #15


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

UnrealGame, Это для меня сложновато, можете пример показать с месяцев я проанализирую его и сделаю под себя
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ktod
сообщение 6.3.2015, 8:29
Сообщение #16
Стаж: 11 лет

Сообщений: 38
Благодарностей: 43
Полезность: 621

Код приведет только как пример, я его не проверял, возможны ошибки, опечатки, нарушение логической последовательности
Код
    while($row = mysql_fetch_assoc($q))
    {
             // Переменная должна получится такой "2015_1_2" - это вторая неделя января в 2015 году
             $data_format  = $row['stat_date_year'] . "_";
             $data_format .= $row['stat_date_month'] . "_";
             $data_format .= $row['stat_date_week'];

             // Переменная содержит дату в чираемом формате, к примеру
             //  "2 неделя января 2015"
             $data_human  = $row['stat_date_week'] . " неделя ";
             $data_human .= $months[$row['stat_date_month']] . " ";
             $data_human .= $row['stat_date_year'];

             // Масив уникальных дан
             $a_data[$data_format] = $data_human;

             // Масив уникальных пользователей
             $a_user[$row['friend_name']] = $row['friend_name'];

             // Масив количества полещений пользователем в определенную дату
             $a_count[$data_format][$row['friend_name']] = $row['count'];
     }

     // Смотрим, что за масивы у нас получились
     // Эта часть нужна только не этапе отладки
     print_r($a_data);
     print_r($a_user);
     print_r($a_count);


    // table begin
    echo '<table class="bordered">
            <tr>
                <th style="text-align: center;"><strong>Пользователь</strong></th>
                <th style="text-align: center;"><strong>Количество</strong></th>
          ';
    foreach( $a_data as $human )
        echo '<th style="text-align: center;"><strong>' . $human . '</strong></th>';

    echo '</tr>';

    // Проходимся по всем пользователям, это строки таблицы
    foreach($a_user as $user_key => $user_value)
    {
        echo '<tr>
            <td><h6>' . $row['friend_name'] . '</h6></td>';
        // Для каждого пользователя проходимся по всем датам
        foreach($a_data as $data_format => $data_human )
        {
            // Если были посещения, выводим значение
            if( isset($a_count[$data_format][$user_name]) )
               echo '<td><h6>' . $row['count'] . '</h6></td>';
            // В ином случае выводим "0"
            else
               echo '<td><h6>0</h6></td>';
        }
        echo '</tr>';
   }
echo '</table>';
// table end


Отредактировал: ktod, - 6.3.2015, 8:33
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 7.3.2015, 16:35
Сообщение #17


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

ktod, Вот как он вывел
Array ( [] => 9 неделя март 2014 ) Array ( [Ermak] => Ermak [Pawa] => Pawa ) Array ( [] => Array ( [Ermak] => 2 [Pawa] => 2 ) )
А в таблицу не вывел, почему?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ktod
сообщение 7.3.2015, 17:26
Сообщение #18
Стаж: 11 лет

Сообщений: 38
Благодарностей: 43
Полезность: 621

Должно было получится что-то вот такое:
Array ( [2014_3_9] => 9 неделя март 2014 ) Array ( [Ermak] => Ermak [Pawa] => Pawa ) Array ( [2014_3_9] => Array ( [Ermak] => 2 [Pawa] => 2 ) )

Выходит вместо "2014_3_9" пустая строка "", это значит, что вот в этой строке:
Код
             $a_data[$data_format] = $data_human;

переменная $data_format равна пустой строке, а не значению "2014_3_9". Скорее всего:
- где-то переменная $data_format указанна с ошибкой
- или вот эта часть кода утеряна:
Код
             // Переменная должна получится такой "2015_1_2" - это вторая неделя января в 2015 году
             $data_format  = $row['stat_date_year'] . "_";
             $data_format .= $row['stat_date_month'] . "_";
             $data_format .= $row['stat_date_week'];
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 7.3.2015, 18:00
Сообщение #19


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

ktod, А почему в таблицу не выводит?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ktod
сообщение 7.3.2015, 19:07
Сообщение #20
Стаж: 11 лет

Сообщений: 38
Благодарностей: 43
Полезность: 621

А как выглядит таблица и чего именно в ней не хватает? Лучше смотреть в исходный ком страницы (html-вид).
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: