wr_8 필드로 정렬되는 게시판의 이전글, 다음글 질문입니다....

wr_8 필드로 정렬되는 게시판의 이전글, 다음글 질문입니다....

QA

wr_8 필드로 정렬되는 게시판의 이전글, 다음글 질문입니다....

본문

일반적인 이전글 다음글은

현재글 wr_id 기준으로 next wr_id값만 가져오면 되는데요..

제가 쓰는 게시판의 정렬기준은

1. wr_8 필드(유동적으로 변하는 값(실시간 평가에 따른 평균값))

2. wr_subject

3. wr_comment

4. ca_name

이렇게 4개로 정렬시키기 때문에..

기존에 있는 이전글 다음글 쿼리는 맞지 않아서 아래와 같이 

재 작성하였습니다;

 

문제는.. 자료가 거의 6000개에 육박하니

이전글 다음글 가져오는 속도가 좀 문제네요.

아래 쿼리를 보시면 아시겠지만 잘 해석도 안되고-_-;; 

제가 짜놨지만 회원님들이면 뭔가 간결하게 다시 작성하는데 도움을

주실 수 있지 않을까 하고 문의 드려봅니다.

 

아래 코드의 대략적인 로직은

[이전글]

1. 현재글의 정보를 가져온다

2. 현재글의 wr_8(평균값)을 기준으로 wr_8값이 더 높거나 같은 게시물을 가져온다.

3. 가져온 게시물 row에 rownum을 만들어서 임시번호(+1)를 넣어준다.

4. 현재글의 wr_id와 $sql_prev 의 결과값의 wr_id 와 맞으면 $sql_prev 의 rownum 값을 -1 해준걸 찾아서, wr_id 를 이전글의 링크에 넣어 만들어준다....

 

 

 

이렇게 되는데요......-_-;

아직 오픈전이라 모두 0점이라 rownum 채번하는데

시간이 상당히 소요되는것 같은데..

다른 방법이 없을까요?ㅠ

board.php 로드에 1.7초나 걸리네요 ㅠㅠ

 

 


$sql_wr_id = " SELECT * FROM {$write_table} WHERE wr_is_comment = 0 AND wr_id = $wr_id"; // 현재 글 
            $row_wr_id = sql_fetch($sql_wr_id);
            $sql_cnt = " SELECT COUNT(*) as cnt FROM {$write_table} WHERE wr_is_comment = 0 AND wr_8 >= '{$row_wr_id['wr_8']}' AND wr_id != $wr_id"; 
            $row_cnt = sql_fetch($sql_cnt);
            // 이전글 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            sql_fetch("set @rownum:=0");
            $sql_prev = "SELECT wr_id, wr_is_comment, wr_subject, @rownum:=@rownum+1 as tmp_prev_num FROM {$write_table} WHERE wr_is_comment = 0 AND wr_8 >= '{$row_wr_id['wr_8']}' order by wr_8 DESC, wr_comment DESC, ca_name ASC, wr_subject ASC";
            $result_prev = sql_query($sql_prev);
            $prev_num = '';
            while ($row_prev = sql_fetch_array($result_prev)) {
                if ($wr_id == $row_prev['wr_id']) {
                    $row_num = $row_prev['tmp_prev_num'];    // 현재글 임시번호
                    $prev_num = $row_num - 1;                // 이전글 임시번호
                    if ($prev_num == -1) {
                        $prev_num = '';
                    }
                }
            }
            sql_fetch("set @rownum:=0");
            $sql_prev = "SELECT wr_id, wr_is_comment, wr_subject, @rownum:=@rownum+1 as tmp_prev_num FROM {$write_table} WHERE wr_is_comment = 0 AND wr_8 >= '{$row_wr_id['wr_8']}' order by wr_8 DESC, wr_comment DESC, ca_name ASC, wr_subject ASC";
            $result_prev = sql_query($sql_prev);
            while ($row_prev = sql_fetch_array($result_prev)) {
                if ($prev_num == $row_prev['tmp_prev_num']) {
                    $sql_prev = " select wr_id, wr_subject from {$write_table} where wr_is_comment = 0 and wr_id = '{$row_prev['wr_id']}' limit 1 ";
                    $prev = sql_fetch($sql_prev);
                }
            }

이 질문에 댓글 쓰기 :

답변 2

정렬에 기준이 되는 칼럼을 4개가 아닌 하나로 하는 방안이 가능한지,

(글저장/수정시에 저장 등)

가능하다면 그러한 방향으로 접근을 하는 것이 좋을 것 같습니다.

잘 될지 모르겠습니다만..

06 라인 이후를 모두 삭제하고 다음의 코드로 대체해 보셨으면 합니다.


$sql_prev = "
  SELECT wr_id, wr_is_comment, wr_subject, 
    FROM {$write_table} 
   WHERE wr_is_comment = 0 
     AND wr_8 <= '{$row_wr_id['wr_8']}' 
   order by wr_8 DESC, wr_comment DESC, ca_name ASC, wr_subject ASC
   limit 1
";
$prev = sql_fetch($sql_prev);
답변을 작성하시기 전에 로그인 해주세요.
전체 219
QA 내용 검색

회원로그인

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