이건 안가능하겟죠? 리스트
본문
게시판에 글이 많이 있습니다.
리스트에..조회수처럼 해당 아이디가 해당게시판에 쓴글이 몇개라는거 표시되게요,,,,,
방법이 있다면 어떻게 해야 할지요?
부하가 많이 걸리겟죠?
1-5페이지만 그렇게 나타내고,,아니면 1주일 이내 작성글에 대해서만 나타내도 될거 같구요,,
대신 해당 게시판 전체글중에 자신의 글이 몇개인지 나타나게 하려구요,,
답변 4
예전에 어디에 작업한 내용입니다
서버 부하를 줄일 수 있는 코드입니다
-- 아이디별 카운트를 화일로 저장하여 보여줍니다(페이지마다 화일을 하나 만듭니다)
--10분마다 한번씩만 카운트하여 보여줍니다
-- id 마다 카운트하지않고 한꺼번에 한번만 카운트 합니다
-- 검색이나 분류선택 보기가 아닐때만 카운트 기록
list 스킨 상단에 복사해 넣으세요
$file = $board_skin_path.'/'.$bo_table,'_'.$page;
$g5_server_time = G5_SERVER_TIME;
$deli='';
if( file_exists($file)){ $data= file($file); $mycnt =unserialize($data[0] ); }
if(!$sca && !$stx && $mycnt[chktime]< $g5_server_time - 600){ //600 <--- 10분 마다 카운트 기록
$idArr = array();
for($k=0; $k<count($list); $k++){
if(!$list[$k][mb_id]) continue;
$idTmp[] =$list[$k][mb_id];
}
if($idTmp[1]) $idArr = array_unique($idTmp); else $idArr = $idTmp;
$idStr ="'". implode("','", $idArr)."'";
$qq = sql_query("select mb_id, count(*) as cnt from $write_table where wr_is_comment='0' and mb_id IN($idStr) group by mb_id");
while($row=sql_fetch_array($qq)) $mycnt[$row[mb_id]] = $row['cnt'];
$mycnt['chktime'] = $g5_server_time;
$bo_tmp= serialize($mycnt);
$fp=fopen($file,'w'); fwrite($fp, $bo_tmp); fclose($fp);
}
for문 다음에
$mb_id= $list[$i][mb_id];
if( !isset($mycnt[$mb_id]) ){
$mycnt =sql_query("select count(*) as mb_id from $write_table where wr_is_comment='0' and mb_id='$mb_id'");
}
echo $mycnt[$mb_id]; //출력할 위치에
기존보다 살짝 부하는 줄 수있겠지만 그렇게 큰 부하는 아닐거라고 보여지네요.
리스트 스킨을 살짝 수정해서 가능합니다
일단 성능 생각안하고.
list.skin.php를 아래 처럼 수정 하면 될 듯 합니다.
1. 글자수 배열 추가
원본
for ($i=0; $i<count($list); $i++) {
수정
$write_count = array();
for ($i=0; $i<count($list); $i++) {
<td class="td_name sv_use"><?php echo $list[$i]['name'] ?></td>
수정
<td class="td_name sv_use">
<?php
echo $list[$i]['name'];
$mb_id = $list[$i]['mb_id'];
if($mb_id && $write_member[$mb_id]) echo "({$write_member[$mb_id]})";
else if($mb_id && $page <= 5) {
$sql = " select count(mb_id) as cnt from $write_table where mb_id = '{$mb_id}' and wr_is_comment = 0 ";
$row = sql_fetch($sql);
$write_member[$mb_id] = $row['cnt']);
echo "({$write_member[$mb_id]})";
}
?>
</td>
5페이지 까지만 계산.
동접자가 꽤 있다면 $write_member 내용을 캐쉬로 저장해서 불러오는 방법 등이 있겠습니다.
!-->!-->!-->!-->
데이터 얼마없으면 부하신경안쓰셔도되는데
나중까지 생각하시면다면
db 에 컬럼하나추가해서 체크하면 좋을거같네요