채택완료

이건 안가능하겟죠? 리스트

2016-07-05 (화) 15:31:37 4,303

게시판에 글이 많이 있습니다.

리스트에..조회수처럼 해당 아이디가 해당게시판에 쓴글이 몇개라는거 표시되게요,,,,,

방법이 있다면 어떻게 해야 할지요?

부하가 많이 걸리겟죠? 

1-5페이지만 그렇게 나타내고,,아니면 1주일 이내 작성글에 대해서만 나타내도 될거 같구요,,

대신 해당 게시판 전체글중에 자신의 글이 몇개인지 나타나게 하려구요,,

|

답변 4개 / 댓글 3개

채택된 답변
+20 포인트

예전에 어디에 작업한 내용입니다

서버 부하를 줄일 수 있는 코드입니다

-- 아이디별 카운트를 화일로 저장하여 보여줍니다(페이지마다 화일을 하나 만듭니다)

--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]; //출력할 위치에

답변에 대한 댓글 1개

2016-07-08 (금) 06:18:53
감사합니다~
고맙습니다~
2016-07-05 (화) 20:18:34

데이터 얼마없으면 부하신경안쓰셔도되는데 

나중까지 생각하시면다면 

db 에 컬럼하나추가해서 체크하면 좋을거같네요 

2016-07-05 (화) 15:43:37

일단 성능 생각안하고.

list.skin.php를 아래 처럼 수정 하면 될 듯 합니다.

1. 글자수 배열 추가

원본

Copy
for ($i=0; $i<count($list); $i++) {

수정

Copy
$write_count = array();for ($i=0; $i<count($list); $i++) {

원본
Copy
<td class="td_name sv_use"><?php echo $list[$i]['name'] ?></td>

수정

Copy
<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 내용을 캐쉬로 저장해서 불러오는 방법 등이 있겠습니다.

답변에 대한 댓글 2개

2016-07-05 (화) 16:13:46
아흐..방법이 잇긴 있근요,,,감사합니다~
해볼게요~
2016-07-05 (화) 16:22:12
위에 for는 이상없는데..
아래 <?php echo $list[$i]['name'] ?> 를 대체하는 코드가 애러가 있는데 왜 그렇까요?

기존보다 살짝 부하는 줄 수있겠지만 그렇게 큰 부하는 아닐거라고 보여지네요.

리스트 스킨을 살짝 수정해서 가능합니다

답변을 작성하려면 로그인이 필요합니다.