요일별 방문자 관련 문의

요일별 방문자 관련 문의

QA

요일별 방문자 관련 문의

답변 1

본문

안녕하세요~ 

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

 

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

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

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

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

 

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

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


// 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'];
}
?>

출력부분


   <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

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


$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'];
}
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #sql ×
전체 728
© SIRSOFT
현재 페이지 제일 처음으로