요일별 방문자 관련 문의
본문
안녕하세요~
그누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'];
}
답변을 작성하시기 전에 로그인 해주세요.