테스트 사이트 - 개발 중인 베타 버전입니다

시간별 접속자 집계 관련 문의 채택완료

수성펜 7년 전 조회 1,957

그누보드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개

채택된 답변
+20 포인트
e
7년 전

$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개

수성펜
7년 전
소스중 뭐가 잘 못된것 같은데..
알수가 없네요..

[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]


안되요..
e
eyekiss
7년 전
// if ($i) {
이건 왜? 주석을.. 주석 삭제해보세요..
그리고 에러 메세지을 올려주셔야 도와드릴수 있습니다.
수성펜
7년 전
https://i.imgur.com/MX3fub8.jpg

지우고 해도 값이 없어요..
수성펜
7년 전
$arr[$row['vi_date']][$row['vi_hour']] = $row['cnt'];

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

위 수정 하는 부분에서 문제가 있는건 아닌가요?
수성펜
7년 전
$sum_count +=$row['vi_date'] += $row['cnt'];

변경했는때 전체 카운팅이 나오지만 중요한 일자별 값은 나오지 않습니다.
링크된 스크린샷이 총 카운팅 나오지만 일자별 카운팅이 나오지 않는 부분 입니다,
뭐가 문제인지 오전 부터 지금까지 계속 만지고 있는데 답이 나오지 않네요,,,

죄송합니다..
e
eyekiss
7년 전
$date_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]
수성펜
7년 전
[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
수성펜
7년 전
답변이 없으셔서 다시 작성한 게시물에 답변을 작성해 주셨습니다.

https://sir.kr/qa/249783?sfl=mb_id%2C1

정말 정말 감사 드립니다.

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

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

로그인