티스토리 뷰

MySQL에서 rownum 구현
페이징이나 기타 의 경우 limit로 사용가능 하나 현재의 row가 검색된 rows중에 몇번째 인지 알 필요가 있을경우

mysql에서 oracle에서 쓰던 rownum 같은것을 구현할 수는 없을까?

 oracle의 rownum과 비슷한 기능을 mysql의 내부 변수로 처리 하면 가능하다.

 

경우 1.

mysql> SET @n := 0;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @n := @n+1 AS rownum, thing, arms, legs FROM limbs;
+--------+--------------+------+------+ | rownum | thing | arms | legs | +--------+--------------+------+------+ | 1 | human | 2 | 2 | | 2 | insect | 0 | 6 | | 3 | squid | 10 | 0 | | 4 | octopus | 8 | 0 | | 5 | fish | 0 | 0 | | 6 | centipede | 0 | 100 | | 7 | table | 0 | 4 | | 8 | armchair | 2 | 4 | | 9 | phonograph | 1 | 0 | | 10 | tripod | 0 | 3 | | 11 | Peg Leg Pete | 2 | 1 | | 12 | space alien | NULL | NULL | +--------+--------------+------+------+
12 rows in set (0.00 sec)


위와 같은 경우 변수를 셋팅하였는등 문제가 있었으나 아래와 같이 하면 한번의 쿼리로 처리가 가능 하다.

 

경우 2.

SELECT @RNUM:=@RNUM+1 AS ROWNUM FROM (SELECT @RNUM:=0) R

SELECT @RNUM:=@RNUM+1 AS ROWNUM , A.* FROM (SELECT @RNUM:=0) R, 테이블_이름 A

 

참고 : http://www.joegrossberg.com/archives/000038.html

'데이타베이스 > MySQL' 카테고리의 다른 글

MySql 명령어 - 펌2  (0) 2011.10.11
MySql 명령어 - 펌1  (0) 2011.10.11
Mysql update시 date_format 이용하기  (0) 2011.10.11
mysql 날짜 비교  (0) 2011.10.11