접속자 visit_hour.php 합산이 아닌 일별 출력 채택완료
아래 코드는 그누보드5 ./adm/visit_hour.php 파일 입니다.
</p>
<p><?php
$sub_menu = "200800";
include_once('./_common.php');</p>
<p>auth_check($auth[$sub_menu], 'r');</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-05-09"; // 종료일</p>
<p> </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'];
}</p>
<p>print_r($arr); // 출력값 확인하기 위해 임시 추가
?></p>
<p>
</p>
<p> <?php
$k = 0;
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 = number_format($rate, 1);</p>
<p> $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>';
}
?></p>
<p>
현재 시간별 접속자 뽑으려고 하는데 2일치 누적되어 출력이 되고 있습니다.
결과 :
Array ( [] => Array ( [00] => 17 [01] => 7 [02] => 2 [03] => 15 [04] => 4 [05] => 3 [06] => 5 [07] => 2 [08] => 7 [09] => 5 [10] => 4 [11] => 3 [12] => 5 [13] => 5 [14] => 1 [15] => 5 [16] => 2 [17] => 3 [18] => 2 [19] => 7 [20] => 3 [21] => 2 [22] => 1 [23] => 4 ) ) // 누적 24시간 누적 자료
이걸 시간별 출력
Array ( [] => Array ( [00] => 1 [01] => 3 [02] => 2 [03] => 4 [04] => 3 [05] => 2 [06] => 2 [08] => 3 [10] => 1 [12] => 2 [13] => 4 [16] => .......(생략)....... [45] => 2 [46] => 3 [47] => 1 ) )
이렇게 바꾸려서 쿼리 뭐라 입력 해야 되는지 궁금 합니다.
앞서 질문을 올려 답변을 받았으나 결과가 나오지 않아 다시 질문을 올립니다. 죄송합니다.
eyekiss 님의 답변 : https://i.imgur.com/rSbevRS.jpg
답변 1개
이 정도면 제작의뢰 수준이네요..^^;;
그냥 제가 전체소스를 수정했습니다.
오류나면 말씀하세요.
</p>
<p><?php</p>
<p>$sub_menu = "200800";</p>
<p>include_once('./_common.php');</p>
<p> </p>
<p>auth_check($auth[$sub_menu], 'r');</p>
<p> </p>
<p>$g5['title'] = '시간별 접속자집계';</p>
<p>include_once('./visit.sub.php');</p>
<p> </p>
<p>$colspan = 4;</p>
<p> </p>
<p>$max = 0;</p>
<p>$sum_count = 0;</p>
<p>$arr = $date_count = array();</p>
<p>$sql = " select SUBSTRING(vi_time,1,2) as vi_hour, count(vi_id) as cnt, vi_date</p>
<p>from {$g5['visit_table']}</p>
<p>where vi_date between '{$fr_date}' and '{$to_date}'</p>
<p>group by vi_hour</p>
<p>order by vi_hour ";</p>
<p>$result = sql_query($sql);</p>
<p>for ($i=0; $row=sql_fetch_array($result); $i++) {</p>
<p>//$arr[$row['vi_hour']] = $row['cnt'];</p>
<p> $arr[$row['vi_date']][$row['vi_hour']] = $row['cnt'];</p>
<p> </p>
<p>if ($row['cnt'] > $max) $max = $row['cnt'];</p>
<p> </p>
<p>//$sum_count += $row['cnt'];</p>
<p> $date_count[$row['vi_date']] += $row['cnt']; //일자별 합계</p>
<p>$sum_count += $row['cnt']; //전체 합계</p>
<p>}</p>
<p>?></p>
<p> </p>
<p><div class="tbl_head01 tbl_wrap"></p>
<p><table></p>
<p><caption><?php echo $g5['title']; ?> 목록</caption></p>
<p><thead></p>
<p><tr></p>
<p><th scope="col">시간</th></p>
<p><th scope="col">그래프</th></p>
<p><th scope="col">접속자수</th></p>
<p><th scope="col">비율(%)</th></p>
<p></tr></p>
<p></thead></p>
<p><tfoot></p>
<p><tr></p>
<p><td colspan="2">합계</td></p>
<p><td><strong><?php echo number_format($sum_count) ?></strong></td></p>
<p><td>100%</td></p>
<p></tr></p>
<p></tfoot></p>
<p><tbody></p>
<p><?php</p>
<p>$k = 0;</p>
<p>if ($i) {</p>
<p>for ($d=strtotime($fr_date); $d<=strtotime($to_date); $d+=60*60*24) { // 오류 인것 같아요.</p>
<p>$date = date('Y-m-d',$d);</p>
<p>for ($i=0; $i<24; $i++) {</p>
<p>$hour = sprintf("%02d", $i);</p>
<p>//$count = (int)$arr[$hour];</p>
<p>$count = (int)$arr[$date][$hour];</p>
<p> </p>
<p>//$rate = ($count / $sum_count * 100);</p>
<p>if($date_count[$date]) $rate = ($count / $date_count[$date] * 100);</p>
<p>else $rate=0;</p>
<p>$s_rate = number_format($rate, 1);</p>
<p> </p>
<p>$bg = 'bg'.($i%2);</p>
<p>?></p>
<p><tr class="<?php echo $bg; ?>"></p>
<p><td class="td_category"><?php echo $hour ?></td></p>
<p><td></p>
<p><div class="visit_bar"></p>
<p><span style="width:<?php echo $s_rate ?>%"></span></p>
<p></div></p>
<p></td></p>
<p><td class="td_numbig"><?php echo number_format($count) ?></td></p>
<p><td class="td_num"><?php echo $s_rate ?></td></p>
<p></tr></p>
<p><?php</p>
<p>}</p>
<p>?></p>
<p><tr></p>
<p><td colspan="2"><?=$date?> 합계</td></p>
<p><td><strong><?php echo number_format($date_count[$date]) ?></strong></td></p>
<p><td>100%</td></p>
<p></tr></p>
<p><?</p>
<p>}</p>
<p>} else {</p>
<p>echo '<tr><td colspan="'.$colspan.'" class="empty_table">자료가 없습니다.</td></tr>';</p>
<p>}</p>
<p>?></p>
<p></tbody></p>
<p></table></p>
<p></div></p>
<p> </p>
<p><?php</p>
<p>include_once('./admin.tail.php');</p>
<p>?></p>
<p>
답변에 대한 댓글 3개
18~19줄 수정해보세요.
[code]
group by vi_date, vi_hour
order by vi_date, vi_hour ";
[/code]
복 받으실꺼에요..
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
오류가 있는것 같아요.,
05월 01일 : https://i.imgur.com/CNYYfkU.jpg 00시 4명
05월 02일 : https://i.imgur.com/DX8ii5t.jpg 00시 11명
이틀치 : https://i.imgur.com/yqOw3me.jpg 5월 1일 00시 15명 / 5월 2일 00시 0명
자세히 보면 5월 1일 방문하지 않은 시간대 5월 2일 표시되는것 같아요.
그리고 이틀치 스크린샷 결과에서 5월 1일 00시 시간대 부터 이틀치 더한 값이 나오는 같구요.