통계를 내는데, 카테고리부분이 적용이 안되고 있습니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

통계를 내는데, 카테고리부분이 적용이 안되고 있습니다. 정보

통계를 내는데, 카테고리부분이 적용이 안되고 있습니다.

본문

저의 의도는 AAA라는 그룹에 있는 각 게시판(카테고리가 모두 동일합니다.)에서 카테고리가 category_c 인 것을 뽑은 후에,
그중에서 wr_3 필드가 A인 경우, B인경우,C인경우 의 갯수를 뽑고자 하는 것입니다.

그런데 저의 의도와는 달리 결과물은,
AAA라는 그룹에서 카테고리 category_c가 들어있는 게시물이 있는 게시판을 뽑아서,
카테고리와는 상관없이 wr_3 필드가 A인 경우, B인경우,C인경우 의 갯수가 나옵니다.

고수님들께서 아래는 보시고 좋은 지도가 있기를 기다립니다.

----------------------------
 
<table cellpadding="0" cellspacing="0" class="table">
  <tr>
      <td class="subject1"><strong>이 름 </strong></td><td class="subject2"><strong> 갯수</strong></td>
  </tr>

<?
$wr_gr_id = 'AAA';
$wr_num_category = 'category_c';

$i = 0;
$j = 0;
$k = 0;
$sql = "SELECT bo_table, bo_subject FROM $g4[board_table] WHERE gr_id = '$wr_gr_id' order by bo_order_search asc ";
$qry = sql_query($sql);

for ($i=0; $row=sql_fetch_array($qry); $i++) {

  echo "<tr> <td class='num1' colspan='2'><strong> $row[bo_subject] </strong></td> </tr> ";

  $wr_bo_table = $row[bo_table];

  $sql2 = "SELECT * FROM g4_write_{$wr_bo_table} WHERE ca_name = '$wr_num_category'";
  $qry2 = sql_query($sql2);
 }
  for ($j=0; $row2=sql_fetch_array($qry2); $j++) {
 
      $sql3 = "SELECT wr_3, count(*) as count FROM g4_write_{$wr_bo_table} WHERE wr_3 = 'A' OR wr_3 = 'B' OR wr_3 = 'C' GROUP BY wr_3 ";
      $qry3 = sql_query($sql3);
     
        for ($k=0; $row3=sql_fetch_array($qry3); $k++) {   
       
            $wr_3_name = $row3[wr_3];
            $wr_3_count = number_format($row3[count]);

?>
<tr>
  <td class="num1"><strong><font color="#1AA9DE"><?=$wr_3_name?></font></strong></td>
  <td class="num2" align="right"><?=$wr_3_count?></td>
</tr>
<? } ?>
<? } ?>
</table>

댓글 전체

테이블별 카운트 처리
<?
$wr_gr_id = 'AAA';
$wr_num_category = 'category_c';

$i = 0;
$j = 0;
$k = 0;
$sql = "SELECT bo_table, bo_subject FROM $g4[board_table] WHERE gr_id = '$wr_gr_id' order by bo_order_search asc ";
$qry = sql_query($sql);

for ($i=0; $row=sql_fetch_array($qry); $i++) {

echo "<tr> <td class='num1' colspan='2'><strong> $row[bo_subject] </strong></td> </tr> ";

$sql2 = "SELECT wr_3, count(*) as count
      FROM g4_write_{$row[bo_table]}
      WHERE ca_name = '$wr_num_category'
        and (wr_3 = 'A' OR wr_3 = 'B' OR wr_3 = 'C')
                group by wr_3 ";

$qry2 = sql_query($sql2);
 
for ($k=0; $row2=sql_fetch_array($qry2); $k++) {

    $wr_3_name = $row2[wr_3];
    $wr_3_count = number_format($row2[count]);

?>
<tr>
  <td class="num1"><strong><font color="#1AA9DE"><?=$wr_3_name?></font></strong></td>
  <td class="num2" align="right"><?=$wr_3_count?></td>
</tr>
<?
}
}
?>

테이블별이 아니라 전체 테이블에 대한 카운트 처리를 하실려면
앞쪽에 변수를 설정하고
안쪽 for 루프에서 변수에 누적시킨후 마지막에 출력처리하면 될듯합니다.
root 님!!  옛날 아이디 그대로죠?

감사합니다. 
고수님 개입하시니 한방에 해결되었습니다.
가르쳐주신 소스중에  ca_name = '---' and (~~~) 요것이 문제해결의 열쇄였군요.

말씀 중에 전체테이블에 대한 카운트문제... 척하면 벌써 아시는군요.
쬐금 더 소스를 갖고 설명해주세요....
다음처럼 적용해보세요.
A,B,C의 값이 루프돌아서 나오므로 if로 비교하여 누계를 계산하도록 합니다.

다음 참고사항입니다. 만약 MySql 버전이 5.x 버전으로 서브쿼리를 지원한다면, A,B,C의 값이 한번에 나오도록 처리가 가능하므로 $qry2를 처리하는 안쪽 루프없이도 처리가 가능합니다.

<?
$wr_gr_id = 'AAA';
$wr_num_category = 'category_c';

$wr_3_A = 0;
$wr_3_B = 0;
$wr_3_C = 0;
$wr_3_X = 0;
$i = 0;
$j = 0;
$k = 0;
$sql = "SELECT bo_table, bo_subject FROM $g4[board_table] WHERE gr_id = '$wr_gr_id' order by bo_order_search asc ";
$qry = sql_query($sql);

for ($i=0; $row=sql_fetch_array($qry); $i++) {

echo "<tr> <td class='num1' colspan='2'><strong> $row[bo_subject] </strong></td> </tr> ";

$sql2 = "SELECT wr_3, count(*) as count
      FROM g4_write_{$row[bo_table]}
      WHERE ca_name = '$wr_num_category'
        and (wr_3 = 'A' OR wr_3 = 'B' OR wr_3 = 'C')
                group by wr_3 ";

$qry2 = sql_query($sql2);

for ($k=0; $row2=sql_fetch_array($qry2); $k++) {

    //$wr_3_name = $row2[wr_3];
    //$wr_3_count = number_format($row2[count]);
    if($row2[wr_3] == "A") {
    $wr_3_A += $row2[count];
    } else if($row2[wr_3] == "B") {
    $wr_3_B += $row2[count];
    } else if($row2[wr_3] == "C") {
    $wr_3_C += $row2[count];
    } else {
    $wr_3_X += $row2[count]; // A,B,C가 아닌것이 있는지 파악하기 위한것
    }
}

$wr_3_A = number_format($wr_3_A);
$wr_3_B = number_format($wr_3_B);
$wr_3_C = number_format($wr_3_C);
}
?>
<tr>
  <td class="num1"><strong><font color="#1AA9DE">A</font></strong></td>
  <td class="num2" align="right"><?=$wr_3_A?></td>
</tr>
<tr>
  <td class="num1"><strong><font color="#1AA9DE">B</font></strong></td>
  <td class="num2" align="right"><?=$wr_3_B?></td>
</tr>
<tr>
  <td class="num1"><strong><font color="#1AA9DE">C</font></strong></td>
  <td class="num2" align="right"><?=$wr_3_C?></td>
</tr>
</table>
척보아도 전문가분이 아니시면 넘보지도 못할 문제였군요.
이렇게까지 복잡한 것이라고는 생각하지 않았는데....

답글 정말 감사드립니다.
아래처럼 했습니다
결과물은 http://iwoman.or.kr/more/report3.php  입니다.
그룹전체통계가 아닌 게시판별 통계입니다.
그리고 아주 중요한 것은 통계가 맞질 않습니다.
제 사용에 무슨 무리가 있는가요?
참고로 저의 경우에는 ($qry2를 처리하는 안쪽 루프없이는 처리가 불가능)합니다.

------------------------
<table cellpadding="0" cellspacing="0" class="table">
  <tr><td colspan=2> <font color=red size=3> 그룹전체카운트 </td></tr>
  <tr>
      <td class="subject1"><strong>상담방법</strong></td><td class="subject2"><strong>상담수</strong></td>
  </tr>
<?
$wr_gr_id = "diary";
$wr_num_category = '성폭력상담';

$wr_3_전화 = 0;
$wr_3_내방 = 0;
$wr_3_방문 = 0;
$wr_3_사이버 = 0;
$wr_3_기타 = 0;
$wr_3_X = 0;

$i = 0;
$j = 0;
$k = 0;
$sql = "SELECT bo_table, bo_subject FROM $g4[board_table] WHERE gr_id = '$wr_gr_id' order by bo_order_search asc ";
$qry = sql_query($sql);

for ($i=0; $row=sql_fetch_array($qry); $i++) {

  echo "<tr> <td class='num1' colspan='2'><strong> $row[bo_subject] </strong></td> </tr> ";

  $sql2 = "SELECT wr_3, count(*) as count
      FROM g4_write_{$row[bo_table]}
      WHERE ca_name = '$wr_num_category'
        and (wr_3 = '전화' OR wr_3 = '내방' OR wr_3 = '방문' OR wr_3 = '사이버' OR wr_3 = '기타')
                group by wr_3 ";

  $qry2 = sql_query($sql2);
 
 
  for ($k=0; $row2=sql_fetch_array($qry2); $k++) {
 
      //$wr_3_name = $row2[wr_3];
      //$wr_3_count = number_format($row2[count]);

    if($row2[wr_3] == "전화") {
    $wr_3_전화 += $row2[count];
    } else if($row2[wr_3] == "내방") {
    $wr_3_내방 += $row2[count];
    } else if($row2[wr_3] == "방문") {
    $wr_3_방문 += $row2[count];
    } else if($row2[wr_3] == "사이버") {
    $wr_3_사이버 += $row2[count];
    } else if($row2[wr_3] == "기타") {
    $wr_3_기타 += $row2[count];
    } else {
    $wr_3_X += $row2[count]; // A,B,C가 아닌것이 있는지 파악하기 위한것
    }

  }

$wr_3_전화 = number_format($wr_3_전화);
$wr_3_내방 = number_format($wr_3_내방);
$wr_3_방문 = number_format($wr_3_방문);
$wr_3_사이버 = number_format($wr_3_사이버);
$wr_3_기타 = number_format($wr_3_기타)


?>
<tr>
  <td class="num1"><strong><font color="#1AA9DE">전화</font></strong></td>
  <td class="num2" align="right"><?=$wr_3_전화?></td>
</tr>
<tr>
  <td class="num1"><strong><font color="#1AA9DE">내방</font></strong></td>
  <td class="num2" align="right"><?=$wr_3_내방?></td>
</tr>
<tr>
  <td class="num1"><strong><font color="#1AA9DE">방문</font></strong></td>
  <td class="num2" align="right"><?=$wr_3_방문?></td>
</tr>
<tr>
  <td class="num1"><strong><font color="#1AA9DE">사이버</font></strong></td>
  <td class="num2" align="right"><?=$wr_3_사이버?></td>
</tr>
<tr>
  <td class="num1"><strong><font color="#1AA9DE">기타</font></strong></td>
  <td class="num2" align="right"><?=$wr_3_기타?></td>
</tr>
<? } ?>
</table>
에구구구.....지금은 잘 돌아갑니다.

이전 것을 자세히 보니 게시판이 누적되면서 wr_3 의 겟수가 누적되어 보여지는 것입니다.
결국 최종적인 게시판에서 누적총수가 나옵니다.

그래서 } 의 위치를 앞으로 당기어

$wr_3_전화 = number_format($wr_3_전화);
$wr_3_내방 = number_format($wr_3_내방);
$wr_3_방문 = number_format($wr_3_방문);
$wr_3_사이버 = number_format($wr_3_사이버);
$wr_3_기타 = number_format($wr_3_기타);
 }
하니 잘 돌아갑니다.

값을 내는대에는 상관이 없이 돌아갔지만,
$wr_3_기타 = number_format($wr_3_기타) 에서도 문제가 있었어요.
요것도 wr_3_기타 = number_format($wr_3_기타); 로 고쳤습니다.

--------------------

root님!!! 감사드립니다.

이제 전체통계를 일목요연하게 볼 수 있게 되었어요.
작은실수로 큰문제를 만들어놓고 고수님의 턱수염을 잡아다닌 꼴이었기에 부끄럽습니다.

그동안 어이없는 저의 질문에 성의 껏 답변해주셔서 정말 감사드립니다.
하시는 일에 큰 성취가 있기를 빕니다.

거듭 감사드립니다.
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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