/bbs/list.php에서 공지사항 부분의 query를 줄이는 수정을 했어요... > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

/bbs/list.php에서 공지사항 부분의 query를 줄이는 수정을 했어요... 정보

/bbs/list.php에서 공지사항 부분의 query를 줄이는 수정을 했어요...

본문

게시판에 공지사항을 여러건 걸어두면 공지사항 갯수만큼 sql_query가 발생하게 됩니다.
그래서, 아래처럼 전체 공지사항을 한번에 query하고, 결과값을 순차로 fetch하게 했습니다.

/bbs/list.php의 87라인 부근입니다.

if (!$sca && !$stx)
{
    $arr_notice = split("\n", trim($board[bo_notice]));
   
    $arr_notice_count = count($arr_notice);

    if ($arr_notice_count > 0) { // 공지사항이 있는 경우
   
    for ($k=0; $k<count($arr_notice); $k++)
    {
        if ($k == 0)
          $sql_where = " wr_id = '" . $arr_notice[$k] . "' ";
        else
          $sql_where .= " or wr_id = '" . $arr_notice[$k] . "' ";
    }
    $sql = " select * from $write_table where $sql_where ";
    $result_notice = sql_query($sql);
   
    while ($row_notice = sql_fetch_array($result_notice))
    {
        if (!$row_notice['wr_id']) continue;

        $list[$i] = get_list($row_notice, $board, $board_skin_path, $board[bo_subject_len]);
        $list[$i][is_notice] = true;

        $i++;
    }
   
    }
}

이렇게 수정을 하고 효과를 보는 중 입니다만 sql_query 갯수는 줄어 들게 되었죠...

그런데 문제가 하나 있습니다.

bo_notice에 ... 21 461 123 ... 이렇게 공지사항이 들어 있더라도 나오는 결과값은 db가
검색하는 순서가 됩니다. 421 123 21 ... 이런식으로.

select * from a where wr_id=21 or wr_id=461 or wr_id=123 이렇게 했을 때...
21 461 123의 순서로 결과가 나오게 하려면 어떻게 해야 할까요???

댓글 전체

우선
wr_id=21 or wr_id=461 or wr_id=123
보다는
wr_id in (21,461,123 )
를 쓰는 것이 간결해 보이고 속도도 아주 쬐금 빠를 겁니다.

그리고 select 순서는

sum을 이용하거나 아니면
case를 이용해서 원하는 순위가 되도록 한 다음 그 값으로 order by하면 되지 않을까요?
감사합니다. 푸름아빠님께서 해결해 주셨어요. select case를 이용해서 공지사항을 별도로
select 하지 않고, 본문 select 할 때 한번에 같이 하게 했답니다. 덕분에 쿼리가 팍~ 줄었어요.
전체 202 |RSS
그누4 질문답변 내용 검색

회원로그인

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