시간별 접속자 집계 관련 문의 채택완료
그누보드5 ./adm/visit_hour.php 파일 입니다.
</p>
<p>$g5['title'] = '시간별 접속자집계';
include_once('./visit.sub.php');</p>
<p>$colspan = 4;</p>
<p>$max = 0;
$sum_count = 0;</p>
<p> </p>
<p>$fr_date = 2018-05-08; // 시작 년-월-일</p>
<p>$to_date = 2018-06-08; // 종료 년-월-일</p>
<p>
$sql = " select SUBSTRING(vi_time,1,2) as vi_hour, count(vi_id) as cnt
from {$g5['visit_table']}
where vi_date between '{$fr_date}' and '{$to_date}'
group by vi_hour
order by vi_hour ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {
$arr[$row['vi_hour']] = $row['cnt'];</p>
<p> if ($row['cnt'] > $max) $max = $row['cnt'];</p>
<p> $sum_count += $row['cnt'];
}
?>
<div style="padding:20px; font-size:20px; font-weight:bold">Total : <?php echo $sum_count?></div>
<?php
$k = 0;
$j = 0;</p>
<p> </p>
<p>if ($i) {
for ($i=0; $i<24; $i++) {
$hour = sprintf("%02d", $i);
$count = (int)$arr[$hour];</p>
<p> $rate = ($count / $sum_count * 100);
$s_rate[$j] = number_format($rate, 1);
$scount[$j] = $count;
$j++;</p>
<p> }
}
?></p>
<p>
현재 30일 기간 선택하면 평균 해당 시간대 방문자 값이 선택 되어 출력이 됨니다.
00시 : 120명 (00시에 30일 기간동안 방문자 누적 120명) (1 값)
01시 : 150명 (01시에 30일 기간동안 방문자 누적 150명) (2 값)
......
23시 : 174명 (23시에 30일 기간동안 방문자 누적 174명) (24 값)
이런식으로 기존출력 24개 값에서 누적되어 출력되는 이것을
00시 4명 (05/08일 4명) 1첫번째
..
..
..
23시 3명 (06/07일 3명) 720번째 (24시간 * 30일 = 720개 (30일) 기준)
기존: 출력값 24개
변경: 출력값이 720개
위 퀴리 부분은 하루 24시간 기준의 작성된 부분 인데 이걸 30일 출력을 할 수 있을까요?
필요한건 퀴리 어떡게 입력 해야 되는지 궁금 합니다.
답변 1개
$arr[$row['vi_date']][$row['vi_hour']] = $row['cnt'];
$sum_count[$row['vi_date']] += $row['cnt'];
로 수정해서 일자별 시간대별 데이터를 저장하고,
시간대별로 for 위에 일자별 for 문을 추가하면 됩니다.
for($d=strtotime($fr_date); $d<=strtotime($to_date); $d+=60*60*24) {
$date = date('Y-m-d',$d);
for ($i=0; $i<24; $i++) {
$hour = sprintf("%02d", $i);
$count = (int)$arr[$date][$hour];
$rate = ($count / $sum_count[$date] * 100);
$s_rate[$j] = number_format($rate, 1);
$scount[$j] = $count;
$j++;
}
}
답변에 대한 댓글 8개
이건 왜? 주석을.. 주석 삭제해보세요..
그리고 에러 메세지을 올려주셔야 도와드릴수 있습니다.
지우고 해도 값이 없어요..
$sum_count[$row['vi_date']] += $row['cnt'];
위 수정 하는 부분에서 문제가 있는건 아닌가요?
변경했는때 전체 카운팅이 나오지만 중요한 일자별 값은 나오지 않습니다.
링크된 스크린샷이 총 카운팅 나오지만 일자별 카운팅이 나오지 않는 부분 입니다,
뭐가 문제인지 오전 부터 지금까지 계속 만지고 있는데 답이 나오지 않네요,,,
죄송합니다..
$sum_count += $row['cnt']; //전체 합계
이렇게 수정하신 후
아래 일짜별 for 문 안에 일자별 합계를 표시해줘야합니다.
[code]
<tr>
<td colspan="2"><?=$date?> 합계</td>
<td><strong><?php echo number_format($date_count[$date]) ?></strong></td>
<td>100%</td>
</tr>
[/code]
$date_count = 0; // 혹시나 해서 추가 했습니다.
$sql = " select SUBSTRING(vi_time,1,2) as vi_hour, count(vi_id) as cnt
from {$g5['visit_table']}
where vi_date between '{$fr_date}' and '{$to_date}'
group by vi_hour
order by vi_hour ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {
$arr[$row['vi_date']][$row['vi_hour']] = $row['cnt'];
if ($row['cnt'] > $max) $max = $row['cnt'];
$sum_count += $row['vi_date'] += $row['cnt']; // 변경 하였습니다. += 추가
$date_count[$row['vi_date']] += $row['cnt'];
}
print_r($arr); // 배열값 알기 위해 임시 추가
<td colspan="2"><?=$date?> 합계</td>
<td><strong><?php echo number_format($date_count[$date]) ?></strong></td>
[/code]
결과 0 값
https://i.imgur.com/xM1tf3s.jpg
https://sir.kr/qa/249783?sfl=mb_id%2C1
정말 정말 감사 드립니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
알수가 없네요..
[code]
<?php
$sub_menu = "200800";
include_once('./_common.php');
auth_check($auth[$sub_menu], 'r');
$g5['title'] = '시간별 접속자집계';
include_once('./visit.sub.php');
$colspan = 4;
$max = 0;
$sum_count = 0;
$sql = " select SUBSTRING(vi_time,1,2) as vi_hour, count(vi_id) as cnt
from {$g5['visit_table']}
where vi_date between '{$fr_date}' and '{$to_date}'
group by vi_hour
order by vi_hour ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {
//$arr[$row['vi_hour']] = $row['cnt'];
$arr[$row['vi_date']][$row['vi_hour']] = $row['cnt'];
if ($row['cnt'] > $max) $max = $row['cnt'];
//$sum_count += $row['cnt'];
$sum_count[$row['vi_date']] += $row['cnt'];
}
?>
<div class="tbl_head01 tbl_wrap">
<table>
<caption><?php echo $g5['title']; ?> 목록</caption>
<thead>
<tr>
<th scope="col">시간</th>
<th scope="col">그래프</th>
<th scope="col">접속자수</th>
<th scope="col">비율(%)</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="2">합계</td>
<td><strong><?php echo number_format($sum_count) ?></strong></td>
<td>100%</td>
</tr>
</tfoot>
<tbody>
<?php
$k = 0;
// if ($i) {
for ($d=strtotime($fr_date); $d<=strtotime($to_date); $d+=60*60*24) { // 오류 인것 같아요.
$date = date('Y-m-d',$d);
for ($i=0; $i<24; $i++) {
$hour = sprintf("%02d", $i);
//$count = (int)$arr[$hour];
$count = (int)$arr[$date][$hour];
//$rate = ($count / $sum_count * 100);
$rate = ($count / $sum_count[$date] * 100);
$s_rate = number_format($rate, 1);
$bg = 'bg'.($i%2);
?>
<tr class="<?php echo $bg; ?>">
<td class="td_category"><?php echo $hour ?></td>
<td>
<div class="visit_bar">
<span style="width:<?php echo $s_rate ?>%"></span>
</div>
</td>
<td class="td_numbig"><?php echo number_format($count) ?></td>
<td class="td_num"><?php echo $s_rate ?></td>
</tr>
<?php
}
} else {
echo '<tr><td colspan="'.$colspan.'" class="empty_table">자료가 없습니다.</td></tr>';
}
?>
</tbody>
</table>
</div>
<?php
include_once('./admin.tail.php');
?>
[/code]
안되요..