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