게시글의 전체 등록된 건수 $total_count 의 실제 쿼리문을 알고 싶은데요?
본문
게시글 갯수를 추출하는 부분에 대해서 추가 문의드립니다.
list.skin.php 내
<!-- 게시판 페이지 정보 및 버튼 시작 { -->
<div class="bo_fx">
<div id="bo_list_total">
<span>목록 Total <?php echo number_format($total_count) ?>건</span>
<?php echo $page ?> 페이지
</div>
($total_count) 는 아래 /bbs/list.php 파일에서 추출하는거 같은데요
아래 보라색내의 full 쿼리 문이 어떻게 되나요?
// 분류 사용 여부
$is_category = false;
$category_option = '';
if ($board['bo_use_category']) {
$is_category = true;
$category_href = G5_BBS_URL.'/board.php?bo_table='.$bo_table;
$category_option .= '<li><a href="'.$category_href.'"';
if ($sca=='')
$category_option .= ' id="bo_cate_on"';
$category_option .= '>전체</a></li>';
$categories = explode('|', $board['bo_category_list']); // 구분자가 , 로 되어 있음
for ($i=0; $i<count($categories); $i++) {
$category = trim($categories[$i]);
if ($category=='') continue;
$category_option .= '<li><a href="'.($category_href."&sca=".urlencode($category)).'"';
$category_msg = '';
if ($category==$sca) { // 현재 선택된 카테고리라면
$category_option .= ' id="bo_cate_on"';
$category_msg = '<span class="sound_only">열린 분류 </span>';
}
$category_option .= '>'.$category_msg.$category.'</a></li>';
}
}
$sop = strtolower($sop);
if ($sop != 'and' && $sop != 'or')
$sop = 'and';
// 분류 선택 또는 검색어가 있다면
$stx = trim($stx);
if ($sca || $stx) {
$sql_search = get_sql_search($sca, $sfl, $stx, $sop);
// 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
$sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
$row = sql_fetch($sql);
$min_spt = (int)$row['min_wr_num'];
if (!$spt) $spt = $min_spt;
$sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) ";
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
// 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922
$sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
$row = sql_fetch($sql);
$total_count = $row['cnt'];
/*
$sql = " select distinct wr_parent from {$write_table} where {$sql_search} ";
$result = sql_query($sql);
$total_count = sql_num_rows($result);
*/
} else {
$sql_search = "";
$total_count = $board['bo_count_write'];
}
답변 3
$sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
$row = sql_fetch($sql);
$total_count = $row['cnt'];
이거 설명해 달라고 하시는건가요?
select count(테이블칼럼명) from 테이블명 where .....
이런식으로이용하는거거든요.
예를 들어 test 라는 테이블이 있고 아래는 컬럼을 정이해 놨다고 하면요
wr_id |
wname |
wid |
asdfasdf |
1 |
홍길동 |
asdf |
asdfasfd |
2 |
동수 |
qwer |
qwerqwer |
3 |
아무개 |
zxcv |
zxcvzxcv |
$query = "select count(wr_id) cnt from test order by wr_id";
$result = sql_query($query);
$row = sql_fetch_array($result);
echo $row[cnt];
이렇게 하면 3이라는 숫자가 나올거에요 빨강색 cnt는 동일해야 하구요
wr_id의 값을 카운터로 가져와라 라고 하는거거든요.
도움이 돼셨으면 채택부탁드려요^^
$total_count = $row['cnt'];다음 행에다
echo $sql; 해보면 전체 쿼리문을 볼 수 있을텐데요
보라색으로 제일 위에 표시하신 부분의 if ($sca || $stx) { 이런부분이있죠?
게시판 list에서 검색어를 입력하여 검색을 하였거나
분류를 클릭하여 분류로 들어갔을때에만 실행이 됩니다.
예를 들어 제목에 게시판 이라고 글짜를 넣고 검색 버튼을 눌렀습니다.
SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM g5_write_test WHERE ((INSTR(wr_subject, '게시판')) ) and (wr_num between -41 and (-41 + 10000))
찾아라 갯수를(중복되지않는 wr_parent를) as cnt라는 곳에 담아라 from g5_write_test라는 게시판의 where
(찾아서 존재하면 숫자1을 반환, 아니면0을 반환해라(wr_subject라는 필드에서, '게시판'이라는 글짜가 있는지 찾아라)) and
그리고 (wr_num필드의 -41부터(내 게시물의 제일 마지막의 wr_num임) and 그리고 (wr_num부터 + 10000을 더한 값들 사이의 모든 값을 찾아라)) 대략 뭐 풀어보자면 이런식인데요
wr_num부터 + 10000까지 정해진 이유는 매번 게시글을 검색할때부터 10만개의 글이있는데 10만개의 글을 싹다 검색하면
검색 결과값이 4000개 6000개 이런식으로 나오겠죠?
그러면 너무 느려져서 과부화가 걸리기 때문에 조회하는 갯수를 1만개로 지정을 해놓은겁니다.
검색어가 있거나 분류가 있다면
$total_count = $row['cnt'];
위에서 쿼리문에서 말을했죠? as 'cnt' cnt에 넣으라고요 그래서 $row['cnt']가 되는겁니다.
처음에 게시판에 가게되면 해당 위의 부분은 적용이안되겠죠?
검색어와 분류명이 없으니
else부분인
$total_count = $board['bo_count_write'];
해당 게시판의 전체글갯수가 보이겠습니다.
그리고 $board['bo_count_write']는 어떻게 생성이 되는지 궁금하실텐데
bbs/write_update.php파일에 보시면 게시글을 등록할때마다
// 게시글 1 증가
sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}'");
이런식으로 계속 1씩 증가 시켜주고있고,
게시글 삭제를 할때에는 -1씩 해주고있습니다.
그렇게하여서 전체글 갯수는 항상 해당 게시판의 $board['bo_count_write'] 필드에 남아있는겁니다.
왜냐? 매번 전체글갯수를 보여줘야하는데 보여줄때마다 쿼리문을 싹다 돌려서 찾으면
느려지기때문에 애초에 해당 게시판의 필드를 하나부여해서 계속 넣어줬던거죠