회원 방문자 집계관련 문의

회원 방문자 집계관련 문의

QA

회원 방문자 집계관련 문의

답변 1

본문

안녕하세요~

관리자 메인페이지에 회원 방문자 집계 그래프를 제작중에 있는데 궁금한 점이 있어 문의드립니다.

현재 신규방문자, 재방문자(회원) 이런식으로 해서 그래프 표현하려고 합니다.

신규방문자 집계 그래프는 구현이 가능합니다.

재방문자(회원) 로그인시에만 접속자로 인정해서 카운팅이 되게 하려고 하는데 이부분에서 막히는군요.

 

혹시 이부분은 어떻게 처리를 하면 되는지 고수님들의 도움을 얻고자 이렇게 문의 드립니다.

 

사용된 소스코드는 아래와 같습니다.

 

DB에 g5_visit 테이블에 mb_id 필드를 추가함


sql_query("ALTER TABLE g5_visit ADD mb_id VARCHAR(255) NOT NULL AFTER vi_device");

 

visit_insert.inc.php 파일 sql 쿼리문에 mb_id 추가함


$sql = " insert {$g5['visit_table']} ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent, vi_browser, vi_os, vi_device, mb_id ) values ( '{$vi_id}', '{$remote_addr}', '".G5_TIME_YMD."', '".G5_TIME_HIS."', '{$referer}', '{$user_agent}', '{$vi_browser}', '{$vi_os}', '{$vi_device}', '{$member['mb_id']}' ) ";

 

sql쿼리


<?php
$sql_common =" select mb_id, vi_date as cnt from {$g5['visit_table']} where mb_id between";
 
// 오늘
$sql = "$sql_common '" . date("Y-m-d") . "' and '" . date("Y-m-d") . " 23:59:59'";
$mb_result = sql_fetch($sql);
?>
 
//출력부분
    <h3>신규 vs 재방문 (최근 7일)<a href=""></a></h3>
   
    <div id="graph_wrap"></div>
 
  <script>
    Morris.Bar({
      element: 'graph_wrap',
      data: [
        { y: '<?php echo date("d일",strtotime("-6 days"));?>', a: <?php echo number_format($result_6['tot']);?>, b: 0},
        { y: '<?php echo date("d일",strtotime("-5 days"));?>', a: <?php echo number_format($result_5['tot']);?>, b: 0},
        { y: '<?php echo date("d일",strtotime("-4 days"));?>', a: <?php echo number_format($result_4['tot']);?>, b: 0},
        { y: '<?php echo date("d일",strtotime("-3 days"));?>', a: <?php echo number_format($result_3['tot']);?>, b: 0},
        { y: '<?php echo date("d일",strtotime("-2 days"));?>', a: <?php echo number_format($result_2['tot']);?>, b: 0 },
        { y: '<?php echo date("d일",strtotime("-1 days"));?>', a: <?php echo number_format($result_1['tot']);?>, b: 0},
        { y: '<?php echo date("오늘",strtotime("today"));?>', a: <?php echo number_format($result['tot']);?>, b: <?php echo number_format($mb_result ['cnt']);?> }
      ],
      xkey: 'y',
      ykeys: ['a', 'b'],
      labels: ['신규', '재방문']
    });
    </script>
 
</div>

 

위와 같이 했는데 적용이 되지 않더군요.. 어떻게 해야 할지 몰라서 이렇게 도움을 요청드립니다.

고수님들의 도움 부탁드리겠습니다.

 

오늘도 즐거운 하루 되세요^^

이 질문에 댓글 쓰기 :

답변 1

$sql 을 출력해보고 그대로 복사해 쿼리를 직접 날려봤을때 문제가 있다면 수정하고

다시 수정한 쿼리문에 맞춰 프로그램을 수정하는것도 방법입니다.

 

아래는 정리해본 내용이니 같이 확인해보시면 좋을것 같습니다.

 

문제점으로 보이는 부분

where mb_id between

between 절 뒤에 오는 부분은 datetime 형식인데 앞의 mb_id 가 datetime 형식인지 확인이 필요할것 같습니다.

 

묵시적 형태보다는 명시적 형태로


date("Y-m-d") . "' and '" . date("Y-m-d") . " 23:59:59'" // '2022-11-10' and '2022-11-10 23:59:59'
date("Y-m-d") . " 00:00:00' and '" . date("Y-m-d") . " 23:59:59'" // '2022-11-10 00:00:00' and '2022-11-10 23:59:59'

 

추가 필요해 보이는 부분

중복제거를 위한 쿼리문에서의 GROUP BY 라던가 DISTINCT 키워드의 사용

안녕하세요 배르만님
먼저 답변주신 부분에 대해서 감사드립니다.
mb_id는 날짜형식이 아닌 아이디 형식입니다. 말씀하신대로  문제점이 발견되어 아래와 같이 수정을 했는데도 출력이 안되네요..


$sql = " select mb_id, as vi_date, count(vi_id) as cnt
            from {$g5['visit_table']}
            where vi_date between '{$fr_date}' and '{$to_date}'
            group by mb_id, vi_date
            order by mb_id, vi_date ";

초보인 저로서는 어디에 문제가 있는 건지 알 수가 없네요..


$sql = " select vi_date, COUNT(DISTINCT mb_id) cnt
            from {$g5['visit_table']}
            where vi_date between '{$fr_date}' and '{$to_date}'
            group by vi_date
            order by vi_date ";

와 같은 형태가 되지 않을까 예상해봅니다.

$sql 을 출력하고 쿼리를 직접 날려보세요.
데이터가 먼저 올바로 나와야 그다음 정상적인 스텝이 보장됩니다.
그렇지 않고서 문제가 생길경우 어디서 잘못됐는지 찾아 헤메는 시간 낭비가
실제 작업 시간보다 더 클수 있습니다.

그리고 에러메세지가 나올경우 그 에러로 검색을 해보시면
어느정도 해결이 가능하거나 혹은 질문을 올리실때 해당 에러메세지를 같이 첨부하면
답변자들로 부터 달리는 답변이나 문제해결 시간단축에 도움이 됩니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #sql ×
전체 728
© SIRSOFT
현재 페이지 제일 처음으로