sir의 인기글 게시판과 같은 것이 구현되는 방법이 궁금합니다.

sir의 인기글 게시판과 같은 것이 구현되는 방법이 궁금합니다.

QA

sir의 인기글 게시판과 같은 것이 구현되는 방법이 궁금합니다.

본문

sir의 인기글 게시판과 같은 것이 구현되는 방법이 궁금합니다.

주소를 보니까 https://sir.kr/bbs/hit.php 이렇게 되더라구요.

고수님들의 조언 부탁드립니다.

이 질문에 댓글 쓰기 :

답변 2

요약하자면 hit 게시판 DB 테이블(링크를 걸기 위한 정보(게시판 id, 글 id)만 저장하기 위한 용도)을 만들어 놓고,

게시판별로 조회수, 추천수 등 인기게시판에 등록되기 위한 조건을 지정해놓습니다. (이건 게시판별 여분컬럼을 쓰셔도 되고 따로 인기게시판 조건용 테이블을 만드시면 됩니다)

 

ex) g5_hit, g5_hit_cond 만듦

g5_hit는 bo_table, wr_id, move_datetime 갖고 있음 (인기게시판 쪽에서 정렬조건(좋아요순, 조회순)까지 쓰고 싶으시다면 wr_good, wr_hit 등의 컬럼을 추가합니다. 다만 이렇게 되면 일반게시판들 글 읽을 때마다 g5_hit에 옮겨진 글이면 일일이 update문을 적용해줘야 할 겁니다. 아니면 게시판을 통테이블로 쓰거나)

 

g5_hit_cond는 bo_table, wr_hit, wr_good, wr_nogood 갖고 있음 (조건이 될 컬럼들)

 

옮기실 때 인기글의 조건을 여러 개로 정할지, 각각의 조건만 만족해도 인기게시판으로 옮기실지는 자유입니다


각 게시판에 해당 글이 이미 hit에 옮겨졌는지를 확인하는 boolean 용도의 컬럼 하나를 사용하여 (여분컬럼 쓰시면 될 겁니다)

 

해당 글을 view할 때, hit에 옮겨지지 않은 글 중에서 조건에 맞으면

아까 만들었던 hit 게시판 DB 테이블에 게시판 id와 글 id를 넘겨 레코드를 등록합니다

 

다만 추천 비추천에 따라 유동적으로 인기게시판에서 빠지거나 재등록되어야 하는 경우라면

해당 글을 view할 때, hit에 옮겨진 글 중에서 조건을 다시 확인하여 hit 게시판에서 다시 delete 해줘야 될 거에요

 

아래 확인해보세요


ex) g5_write_xxx (게시판 테이블)의 wr_1을 인기게시판에 등록되었는지의 여부로 사용
글을 봤을 때 (view.php)
// 인기글이든 아니든 view할 때마다 조건 확인 필요
$sql = "SELECT * FROM g5_hit_cond WHERE bo_table = '{$bo_table}'";
$hit_cond = sql_fetch($sql); // 조건 가져옴
if($view['wr_hit'] >= $hit_cond['wr_hit'] && $view['wr_good'] >= $hit_cond['wr_good'] && $view['wr_nogood'] <= $view['wr_nogood']){ // 예를 들어서
      $hit_move = true;
}else{
      $hit_move = false;
}
if(!$view['wr_1']){ // 아직 hit테이블에 옮겨지지 않은 경우
      if($hit_move){ // 옮긴다
            $sql = "INSERT INTO g5_hit ~~~~~~";
            $result = sql_query($sql); // result에 따라 try catch문으로 에러 처리
      }
}else{ // 이미 옮겨진 경우
      if(!$hit_move){ // 비추천이 많아지거나 등으로 조건을 비충족하게 되었으므로 다시 제거한다
            $sql = "DELETE FROM g5_hit WHERE ~~~~ LIMIT 1";
            $result = sql_query($sql); // result에 따라 try catch문으로 에러 처리
      }
}

 

 

이제 hit.php 와 같은 인기글 페이지로 가면 g5_hit 테이블을 읽게 하여 인기게시판 페이지를 구성합니다.

기본적으로는 옮겨진 시간(move_datetime)으로 하여 내림차순이 좋다고 봅니다만

따로 wr_hit이나 wr_good으로도 정렬하고 싶으시다면

위에 써놓은 것처럼 일반게시판에서 view할 때마다 g5_hit에 옮겨진 글들도 같이 UPDATE를 해줘야하기 때문에 그누보드처럼 게시판별로 테이블을 따로 사용하는 경우라면 리소스를 더 먹을 수 있습니다.

 

그리고 인기게시판 조건은 함수화해서 라이브러리에 넣어놓으시면 좋을 것입니다

function is_this_hit($wr_hit, $wr_good, $wr_nogood){

     // 조건에 따라 return true, return false

}

 

제가 아는 방법은 이렇습니다만 더 효율적이고 좋은 방법이 많을 겁니다.

 

질문자님 사이트의 상황에 맞춰서 커스터마이징 해보세요.

공유해주라고 졸라보세요.

https://sir.kr/co_qa

 

요로코롬... 

답변을 작성하시기 전에 로그인 해주세요.
전체 123,128 | RSS
QA 내용 검색

회원로그인

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