나의질문답

mysql count , rownum 질문입니다.

예쁜꽃이피었으면 2016. 9. 29. 09:12


http://okky.kr/article/352011


안녕하세요. 

mssql로 짜여있던 소스를 mysql로 변경하려고 합니다.

페이징 처리를 위해 쿼리문을 수정중인데 막히는 부분이 있어서 질문드립니다.


SELECT ALLSHOP.* 
FROM
    	(
        	SELECT 
        		        A.*
        	        ,	@ROWNUM:=@ROWNUM+1 AS RNUM
        	FROM 
        	( SELECT * FROM SHOP ) A ,
        	( SELECT @ROWNUM := 0 ) R
        	 ORDER BY A.SHOPID DESC
    	) AS ALLSHOP
WHERE ALLSHOP.RNUM BETWEEN ((#page#-1)*#pageSize#)+1 AND #page#*#pageSize# 

이 쿼리문에 count(*) as total_count를 추가 하려고 합니다.

현재 검색결과에 마지막 칼럼을 total_count라고 이름을 주고 전체 값이 반복하여 들어 갔으면 합니다..

설명이 부족한 것 같아서 그림 추가합니다.. 

이렇게 되었으면 합니다.. 어떻게 해야 할까요?

설명이 부족하면 더 추가하겠습니다.

답변부탁드립니다. 감사합니다.




제가 해봤던 것 몇 개 올립니다.


SELECT ALLSHOP.* 
FROM
    	(
        	SELECT 
        		         A.*
                       ,	COUNT(*) AS TOTAL_COUNT
        	       ,	@ROWNUM:=@ROWNUM+1 AS RNUM
        	FROM 
        	( SELECT * FROM SHOP ) A ,
        	( SELECT @ROWNUM := 0 ) R
                  GROUP BY A.SHOPID,A.SHOPNAME
        	  ORDER BY A.SHOPID DESC
    	) AS ALLSHOP
WHERE ALLSHOP.RNUM BETWEEN ((#page#-1)*#pageSize#)+1 AND #page#*#pageSize# 

=> total_count 가 모든 컬럼에 추가되어 나오기는 하는데 값이 1입니다.




SELECT ALLSHOP.* 
      FROM
    	(
        	SELECT 
        	         	A.*
                       ,	COUNT(*) AS TOTAL_COUNT
                       ,	@ROWNUM:=@ROWNUM+1 AS RNUM
        	FROM 
        	( SELECT * FROM SHOP    GROUP BY SHOPID,SHOPNAME) A ,
        	( SELECT @ROWNUM := 0 ) R
        	  ORDER BY A.SHOPID DESC
    	) AS ALLSHOP
WHERE ALLSHOP.RNUM BETWEEN ((#page#-1)*#pageSize#)+1 AND #page#*#pageSize#

=> total_count는 원하는 값이 나오지만 검색 결과가 하나입니다..




SELECT ALLSHOP.* 
FROM
    	(
        	SELECT 
        	  A.*
                ,	B.total_count
        	,	@ROWNUM:=@ROWNUM+1 AS RNUM
        	FROM 
        	( SELECT * FROM SHOP    ) A ,
                ( SELECT count(*) as total_count FROM SHOP   ) B ,
        	( SELECT @ROWNUM := 0 ) R
        	  ORDER BY A.SHOPID DESC
    	) AS ALLSHOP
WHERE ALLSHOP.RNUM BETWEEN ((#page#-1)*#pageSize#)+1 AND #page#*#pageSize# 
   


좋은 방법인지는 모르겠으나 우선 이렇게 해두고 넘어가려고 합니다.

더 좋은 방법이 있다면 알려주세요~~



< 참고 블로그 >


mysql ibatis로 페이징 처리하기 ★★★

http://toring92.tistory.com/44


rownum을 사용하여 조회된 결과에 번호 붙이기★★★

http://cremazer.blogspot.kr/2013/09/mysql-rownum.html


mysql rownum 구현하기

http://dhplanner.blogspot.kr/2009/07/mysql-rownum-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0.html


mysql - 행 번호 매기기

http://linuxism.tistory.com/747


[MySQL] Oracle의 그룹별 번호 매기기와 같은 기능 구현하기

http://blackbull.tistory.com/43


mysql은 count 함수 없나요? ㅠ

http://okky.kr/article/201559


페이징(Paging)에 대한 이해 - (2) ROW NUMBER 을 이용한 게시물 가져오기.

http://okky.kr/article/282926


스프링(Spring) 개발 - (17) 페이징 (전자정부 프레임워크 이용)

http://addio3305.tistory.com/89


rownum 표현 방법

http://firstboos.tistory.com/entry/mysql-%EC%97%90%EC%84%9C-rownum-%EB%A7%8C%EB%93%A4%EA%B8%B0


[DBMS] [mysql] 페이징 처리시 총건수 문제

http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=74613&sca=DBMS




반응형