시간별 접속자 집계 관련 문의

시간별 접속자 집계 관련 문의

QA

시간별 접속자 집계 관련 문의

본문

그누보드5 ./adm/visit_hour.php 파일 입니다.

 


$g5['title'] = '시간별 접속자집계';
include_once('./visit.sub.php');
$colspan = 4;
$max = 0;
$sum_count = 0;
 
$fr_date = 2018-05-08;  // 시작 년-월-일
$to_date = 2018-06-08;  // 종료 년-월-일

$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'];
    if ($row['cnt'] > $max) $max = $row['cnt'];
    $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;
 
if ($i) {
 for ($i=0; $i<24; $i++) {
  $hour = sprintf("%02d", $i);
  $count = (int)$arr[$hour];
  $rate = ($count / $sum_count * 100);
  $s_rate[$j] = number_format($rate, 1);
  
  $scount[$j] = $count;
  $j++;
 }
}
?>

 

현재 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++;  

 }

}

 

소스중 뭐가 잘 못된것 같은데..
알수가 없네요..



<?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');
?>



안되요..

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

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

죄송합니다..

$date_count[$row['vi_date']] += $row['cnt'];  //일자별 합계
$sum_count += $row['cnt']; //전체 합계
이렇게 수정하신 후
아래 일짜별 for 문 안에 일자별 합계를 표시해줘야합니다.


<tr>
<td colspan="2"><?=$date?> 합계</td>
<td><strong><?php echo number_format($date_count[$date]) ?></strong></td>
<td>100%</td>
</tr>


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



결과  0 값

https://i.imgur.com/xM1tf3s.jpg

답변을 작성하시기 전에 로그인 해주세요.
전체 1

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT