[mysql] limit 활용법
게시판을 만들다가 게시글 상세페이지에서 문제가 발생해 글을 적는다.
게시글 상세 페이지 기능 중 앞 뒤의 게시글을 idx를 통하여 가져오고 del_YN 이라는 컬럼을 통해서 삭제 여부를 가려 가져와야 되는 상황이였다. (조건이 2개이고 가져와야하는 글은 1개, 이 데이터로 해당 글의 상세페이지로 넘어가는 역할을 하는 기능).
시도했던 부분
1. 자바에서 조건문을 통하여 앞 뒤 글을 가져오려고 했지만 결괏값이 null이 들어와 비교를 할 수가 없었다.
2. 쿼리를 고쳐서 해보려고 해도 특정 개수의 값을 가져오는 법을 몰랐었다.
이렇게 조건에 따른 하나 또는 특정 개수의 데이터를 가져올 때 Limit를 사용한다.
이처럼 조건문 + 정렬을 통해 게시글의 다음 글을 limit 1 로 1개의 개수를 뽑아낼 수 있었다.
또한 offset을 설정해 해당 조건에서 몇번째부터 출력을 할지 여부도 설정이 가능하다. 즉 limit 10, 5 를 하면 쿼리의 해당 조건의 5번째 라인 이후 6번째부터 10개를 출력한다는 의미이다. mysql에서 paging을 활용할 때도 이렇게 limit를 통해 몇개의 데이터를 뽑아내는지 출력할 수 있다.
+ 추가 내용
상사님의 조언으로 세개의 쿼리를 하나로 합쳐서 하나의 쿼리로 결괏값을 받을 수 있다고 하셨다. 서브쿼리나 join을 사용하면 된다고 하셨는데 Union을 사용하면 쉽게 할 수 있다는 것을 알게 됨
이처럼 mysql에서는 서브쿼리의 중간에 union을 사용해서 간단하게 하나의 쿼리로 출력하게 할 수 있다.