본문 바로가기

편안한코딩생활/오류 해결 일지

페이징 순서대로 정렬 시 주의할 점(rownum 과 order by)

<!--            select review_id, products_id, review_writter, review_title, review_content, review_star, review_img, review_date, review_hit-->
<!--        from ( select rownum rn, review_id, products_id, review_writter, review_title, review_content, review_star, review_img, review_date, review_hit-->
<!--                from review-->
<!--                where rownum <= ( #{pageNum} * #{amount})-->
<!--                order by review_id desc )-->
<!--                where rn > (#{pageNum} -1) * #{amount}-->

페이징 쿼리를 이렇게 작성하고, order by를 어느 위치에 끼워도 

그 페이지 안에서 순서만 바뀔 뿐 전체 페이지가 순서대로 정렬되지 않는 오류가 발생했다

ROWNUM : 조회된 순서대로 순번을 매기는 고유 변수

ORDER BY : 데이터 정렬 시 사용되는 기능

유의점은 ORDER BY로 데이터 정렬이 되기 전에, ROWNUM이 매겨진다는 것

https://ajdahrdl.tistory.com/23 => 참고 블로그

그러므로 

select * from (
                select rownum rn, temp.* from
                (select review_id, products_id, review_writter, review_title, review_content, review_star, review_img, review_date, review_hit
                from review
                order by review_id desc ) temp
                where rownum <= ( #{pageNum} * #{amount}))
                where rn > (#{pageNum} -1) * #{amount}

이렇게 rownum을 밖으로 빼고, 안의 쿼리를 temp라는 as로 이름 지어 조회하면

최신글을 쓴 순서대로 정렬이 완료된다!