미채택 완료

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

2018-07-13 (금) 15:22:07 2,772

일반적인 이전글 다음글은

현재글 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초나 걸리네요 ㅠㅠ

Copy
$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개 / 댓글 1개

2018-07-13 (금) 20:32:40

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

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

Copy
$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);

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

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

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

답변에 대한 댓글 1개

정렬 칼럼은
wr_8은 반드시 있어야 하구요
그 안에서 또 가나다 순으로 해줘야 해서요 ㅠㅠ

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