본문 바로가기

개발개발/db

[oracle/mysql] 이전글, 다음글 쿼리

[oracle/mysql] 이전글, 다음글 쿼리

1. oracle

간단하게 LEAD, LAG를 통해 이전글, 다음글을 구해봅니다.

	
	SELECT A.*
	FROM (
		SELECT 
			BOARD_NO, 
			BOARD_TITLE,
			BOARD_TYPE,
			LEAD(BOARD_NO, 1) OVER (ORDER BY BOARD_NO DESC) AS NEXT_NO,
			LEAD(BOARD_TITLE, 1, '다음글이 없습니다') OVER (ORDER BY BOARD_NO DESC) AS NEXT_TITLE,
			LAG(BOARD_NO, 1) OVER (ORDER BY BOARD_NO DESC) AS PRE_NO,
			LAG(BOARD_TITLE, 1, '이전글이 없습니다') OVER (ORDER BY BOARD_NO DESC) AS PRE_TITLE
		FROM BOARD_TB
	) A
	WHERE A.BOARD_TYPE = 1;

2. mysql

limit를 이용해서 현재 글(#{no}) 보다 큰 녀석을 1개, 작은 녀석을 1개 가져옵니다.

	
	SELECT
		BOARD_NO
	 FROM 
		BOARD_TB
	 WHERE
	  BOARD_NO IN ( 
	    (SELECT BOARD_NO FROM BOARD_TB WHERE BOARD_NO < #{no}  ORDER BY BOARD_NO DESC LIMIT 1),
	    (SELECT BOARD_NO FROM BOARD_TB WHERE BOARD_NO > #{no}  ORDER BY BOARD_NO LIMIT 1),
	   );