통계를 내는데, 카테고리부분이 적용이 안되고 있습니다.
저의 의도는 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_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>
|
댓글을 작성하시려면 로그인이 필요합니다.
댓글 7개
<?
$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 루프에서 변수에 누적시킨후 마지막에 출력처리하면 될듯합니다.
적용후 다시 질문드리겠습니다.
감사합니다.
고수님 개입하시니 한방에 해결되었습니다.
가르쳐주신 소스중에 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님!!! 감사드립니다.
이제 전체통계를 일목요연하게 볼 수 있게 되었어요.
작은실수로 큰문제를 만들어놓고 고수님의 턱수염을 잡아다닌 꼴이었기에 부끄럽습니다.
그동안 어이없는 저의 질문에 성의 껏 답변해주셔서 정말 감사드립니다.
하시는 일에 큰 성취가 있기를 빕니다.
거듭 감사드립니다.