이전글/다음글 SQL문

2022. 1. 5. 01:18
반응형
SELECT table_idx FROM tableName
WHERE table_idx
IN (
(SELECT table_idx FROM tableName WHERE table_idx < CurrentIndex DESC LIMIT 1),
(SELECT table_idx FROM tableName WHERE table_idx < CurrentIndex ASC LIMIT 1)
);

table_idx에는 해당테이블의 인덱스값, CurrentIndex부분은 #{변수}를 바인딩해주면 된다.

해당 테이블의 특정 인덱스 넘버 전후의 데이터를 가져오는데

왜인지는 모르겠으나 키값 두개는 가져오지 못하는 구조였다 =_=;;

 

SELECT *,
(SELECT bd_idx FROM book_detail WHERE book_bd_idx = #{book_bd_idx} and <![CDATA[bd_idx < #{bd_idx}]]> ORDER BY bd_idx DESC LIMIT 1) 'PREV'
,(SELECT bd_idx FROM book_detail WHERE book_bd_idx = #{book_bd_idx} and <![CDATA[bd_idx > #{bd_idx}]]> ORDER BY bd_idx ASC LIMIT 1) 'NEXT'
FROM book_detail
WHERE book_bd_idx = #{book_bd_idx} and bd_idx = #{bd_idx};

아예 현재 페이지와 함께 이전/다음글의 인덱스값을 가져와보자는 목적으로 짠 SQL문

문제는 prev, next의 값이 0이 되거나 해당 SQL문의 값이 null일 때도 페이지가 넘어간다는 점이다

이전글/다음글을 클릭 시에 넘어가지 않게 조건문을 걸어주어야 하는데,

부트스트랩 사용 시,

<a> 태그는 링크가 있으면 disabled 속성과 관계없이 링크로 넘어가버리므로 버튼을 사용해서 막는 것이 편했다.

다만, 인덱스값 중 하나가 0이어도 링크에 담기는 점이 거슬려 고민하다가 다시 <a>태그를 사용했다.

 

Jquery를 써서, 인덱스값이 0일 때는 <a>태그의 removeAttr()메소드로 href 속성을 지워버리는 것으로 해결했다.

 

※ 위의 SQL문은 현재 인덱스넘버 기준으로 전/후의 인덱스넘버를 가져오고 아래의 SQL문은 현재 데이터에 현재 인덱스넘버 전/후의 인덱스값을 컬럼에 붙여서 불러온다

반응형

BELATED ARTICLES

more