이전 목록 다음
채택완료

요일별 방문자 관련 문의

안녕하세요~ 

그누5를 배우는 초보자입니다.

 

관리자 페이지 메인에 요일별 방문자 집계 (최근 4주) 그래프를 만들려고 하는데요

즉 이번주, 저번주, 2주전, 3주전 이런식으로 하려고 합니다.

요일과 그래프는 정상적으로 출력은 잘 되고 있습니다.

(데이터 부분에 임의 수치를 넣었을때 그래프는 정상출력 됩니다)

 

문제는 요일별 방문자 데이터가 출력이 되지 않고 있습니다.

사용된 소스코드는 아래와 같습니다.

Copy
// sql 쿼리

<?php

$today = time();

$week = date("w");

 

$week_first = $today-($week*86400);

$week_last = $week_first+(6*86400);

 

$fr_date = date("Y-m-d",$week_first-(86400*30))." and ".date("Y-m-d",$week_last-(86400*30));

$to_date = date("Y-m-d",$week_first)." and ".date("Y-m-d",$week_last);

 

$weekday = array ('월', '화', '수', '목', '금', '토', '일');

 

$sum_count = 0;

$arr = array();

 

$sql = " select WEEKDAY(vs_date) as weekday_date, SUM(vs_count) as cnt

            from {$g5['visit_sum_table']}

            where vs_date between '{$fr_date}' and '{$to_date}'

            group by vs_date, weekday_date

            order by vs_date, weekday_date ";      

 

$result = sql_query($sql);

for ($i=0; $row=sql_fetch_array($result); $i++) {

    $arr[$row['vs_date']][$row['weekday_date']] = $row['cnt'];

 

    $sum_count += $row['cnt'];

}

?>

출력부분

Copy
<div class="graph_wrap">

         

        <div id="visitor_graph_day"></div>

 

        <script>

        var eg2 = new Easygraphs({

          container: document.getElementById('visitor_graph_day'),

          width: 550,

          height: 160,

          padding: {

            top: 30,

            right: 30,

            left: 65

          },

          tooltip: {

            template: '{{ category }}: {{ value }}',

            widthAuto: true,

            color: '#222',

            background: '#FFF'

          },

          yAxis: {

            text: {

              toFixed: 0

            },

            title: {

              text: '방문자수'

            },

            grid: {

              show: false

            }

          },

          xAxis: {

 

            labels: [

              <?php

    $k = 0;

    if ($i) {

        for ($i=0; $i<7; $i++) {

            $count = isset($arr[$i]) ? (int) $arr[$i] : 0;

 

            $rate = ($count / $sum_count * 100);

            $s_rate = number_format($rate, 1);

    ?>'<?php echo $weekday[$i]?> (<?php echo $s_rate ?>%)',

    <?php } } ?>

  ]

         

          },

          data: [

            {

            name: '이번주',

            dots: {

              color: 'rgb(3, 169, 245)'

            },

            line: {

              width: 1,

              color: 'rgb(3, 169, 245)'

            },

              values: [

                <?php

    $k = 0;

    if ($i) {

        for ($i=0; $i<7; $i++) {

            $count = isset($arr[$date][$i]) ? (int) $arr[$date][$i] : 0;

 

            $rate = ($count / $sum_count * 100);

            $s_rate = number_format($rate, 1);

 

            $bg = 'bg'.($i%2);

    ?><?php echo $count?>,

    <?php } } ?>

  ]

            },

            {

            name: '저번주',

            dots: {

              color: 'rgb(255, 140, 4)'

            },

            line: {

              width: 1,

              color: 'rgb(255, 140, 4)'

            },

              values: [ //데이터 들어가는 부분

 

              ]

            },

            {

            name: '2주전',

            dots: {

              color: 'rgb(97, 108, 119)'

            },

            line: {

              width: 1,

              color: 'rgb(97, 108, 119)'

            },

            values: [ //데이터 들어가는 부분

 

            ]

            },

      {

            name: '3주전',

            dots: {

              color: 'rgb(156, 177, 196)'

            },

            line: {

              width: 1,

              color: 'rgb(156, 177, 196)'

            },

            values: [ //데이터 들어가는 부분

 

            ]

            }

 

          ]

        });

        eg2.render();

        </script>

 

    </div>

 

</div>

지난번에 여러 고수님들이 조언해주신 대로 쿼리문 부터 date 함수를 참고해서 수정하고 테스트 해보고 있는데 진전이 없어 이렇게 문의 드립니다.

고수님들의 조언 부탁 드리겠습니다.

 

오늘도 좋은 하루 되세요^^

 

 

|

답변 1개 / 댓글 1개

채택된 답변
+20 포인트

날짜별로 저장해서 불러오면 됩니다.

Copy
$today = time();

$week = date("w");

 

$week_first = $today-($week*86400);

 

$fr_date = date("Y-m-d",$week_first-(86400*21));

$to_date = date("Y-m-d",$today);

 

$weekday = array ('일', '월', '화', '수', '목', '금', '토');

 

$sum_count = 0;

$arr = $week_arr = array();

 

$sql = " select *

            from {$g5['visit_sum_table']}

            where vs_date between '{$fr_date}' and '{$to_date}'

            group by vs_date

            order by vs_date ";      

 

$result = sql_query($sql);

for ($i=0; $row=sql_fetch_array($result); $i++) {

    $arr[$row['vs_date']] = $row['vs_count'];

    $week_arr[date("w",strtotime($row['vs_date']))] += $row['vs_count'];

 

    $sum_count += $row['vs_count'];

}

답변에 대한 댓글 1개

eyekiss 님
너무 감사합니다. 한가지 더 배웠습니다.
즐거운 하루되세요

답변을 작성하려면 로그인이 필요합니다.

🐛 버그신고