mysql을 쓰다보면 oracle 처럼 rownum을 써야하는 경우가 생긴다.
혹은, 자동으로 1씩 증가하는 for 문의 변수(주로 integer i)와 같은 형태의
컬럼의 쿼리에서 구현하는 것이 편할 때가 있다.
주로 ordering이나 grouping 후 순위를 매길 때가 그런 경우인데,
그럴 때 쓸 수 있는 rownum이 mysql에도 있다.
ex 1 )
SELECT @RNUM := @RNUM + 1 AS ROWNUM
FROM ( SELECT @RNUM := 0 ) R
ex 2 )
SELECT @RNUM := @RNUM + 1 AS ROWNUM, t.*
FROM
(
SELECT *
FROM table
ORDER BY column1
) t,
( SELECT @RNUM := 0 ) R
ex 2 처럼 구현하게 되면 ordering 된 상태에서 rownum이
0부터 순서대로 부여된다.
은근히 자주 쓰이는 편리한 방법이다. ^^
좋은 정보 감사합니다!
답글삭제질문이 있습니다. 아무리 여러 게시글을 보고 따라해도 변경이 안되어서요...;;
답글삭제jsp 게시판의 나열 쿼리입니다.
String board_list_sql="select * from "+
"(select rownum rnum,BOARD_NUM,BOARD_ID,BOARD_SUBJECT,"+
"BOARD_CONTENT,BOARD_FILE,BOARD_RE_REF,BOARD_RE_LEV,"+
"BOARD_RE_SEQ,BOARD_READCOUNT,BOARD_DATE from "+
"(select * from memberboard order by "+
"BOARD_RE_REF desc,BOARD_RE_SEQ asc)) "+
"where rnum>=? and rnum<=?";
오라클 쿼리 입니다. 이것을 mysql 쿼리로 바꾸려고 합니다. 그런데 안되네요...;;
제가 변경해본 쿼리는
select @ rnum:= @rnum+1 as rownum,
from ( select BOARD_NUM,BOARD_ID,BOARD_SUBJECT,
BOARD_CONTENT,BOARD_FILE,BOARD_RE_REF,BOARD_RE_LEV,
BOARD_RE_SEQ,BOARD_READCOUNT,BOARD_DATE
from (select *
from memberboard
order by BOARD_RE_REF desc,BOARD_RE_SEQ asc)
) as memberboard, (select @rnum:=0)
where rnum>=? and rnum<=?
입니다.. 어디를 어떻게 수정해야 할지 혹시 알 수 있을까요?
테이블은 memberboard 라는 이름의 테이블 하나뿐이 없습니다.
그 안에 있는 컬럼명은 위의 컬럼명이 전부입니다.!