또다른시작
2k
2017-01-01 02:15:34
16
3214

게시판 페이징 rownum 질문드립니다


게시물 긁어오는것도 되고 게시물이 100개면 제가보여줄것도 10개라서 나누면 10개잖아요?

그래서 10개가 나오게해놨습니다.

근데 여기서.. 아주간단한건데 알거같은데 몰라서 질문드립니다..

뭐냐하면.. 

지금 총게시물이 22개라서 

1,2,3 다음 이렇게 나옵니다

근데 2,3에 링크를 어떻게 걸어주고 쿼리문을 작성해야 2번갔을때 12~2 까지 나오는지 감이 안오네요..

현재 게시물 불러올때 rownum<=10  rownum=>1  걸어놔서 최근 작성된 22부터 13까지 불러옵니다.

그다음에 최종적인 작업만남았네요.. 구글링해봐도 잘안나와서 이렇게 적어봅니다.. 이거 불러올땐 ajax쓰나요? 제가 일단 ajax 써서 map으로 리턴받아서 totalCount (총게시물수) 하고 게시물들 list로 받아오고있거든요...

도와주세요..ㅠ

0
  • 답변 16

  • 애니타임
    338
    2017-01-01 03:53:38

    http://qkrgns208.tistory.com/90 

    이글이 답변이 될까요?

  • 휘리리뿅
    1k
    2017-01-01 08:36:21

    일단 쿼리 조회부분 앞부분 컬럼에 번호를 매기고 1-10

    11-20 21-30이렇게 출력해보시고해보고

    30개의 데이터를 10개로 나누면 3페이지 나오죠

    1페이지 클릭 시 1-10 나오게 하고 2페이 클릭시 11-20 나오게 하면 합니다다

    보시나요? 1페이지 클릭시 1 곱하기 10하면 끝페이지 나오고 거기서 9를 빼면 시작페이지가 나옵니다

    2페이지 클릭시 곱하기10을 하면 20페이지 -9히면 11페이지 ^^

  • 또다른시작
    2k
    2017-01-01 13:55:33

    그런데 rownum으로 해서그런지... 11 20 하면... 12~3까지 나와야되는데.. 22~12가 나옵니다.. 뭔가이상한네요.. 저도 1~10 / 11~ 20 / 21~ 30 이런식으로 출력해볼려고 쿼리문을 다양하게바꿔봤는데... 안되네요.. rownum 함수 써서 그런가요;;

  • 또다른시작
    2k
    2017-01-01 14:03:27
    SELECT X.rnum,   X.TXT_ID,X.TXT_NUM,X.TXT_TITLE,X.TXT_WRITER,X.TXT_DATE,X.TXT_HITS,X.TXT_CONTENT
       FROM ( SELECT .rnum,A.TXT_ID,A.TXT_NUM,A.TXT_TITLE,A.TXT_WRITER,A.TXT_DATE,A.TXT_HITS,A.TXT_CONTENT
           FROM ( SELECT ROWNUM rnum, T_ID,TXT_NUM,TXT_TITLE,TXT_WRITER,TXT_DATE,TXT_HITS,TXT_CONTENT
            FROM NOTICEBOARD ORDER BY TXT_DATE DESC) A
              WHERE ROWNUM <= 10) X
        WHERE X.rnum >= 1


    이거에 결과값은 22~ 13 이 나오네요


    그리고..

    SELECT X.rnum, X.TXT_ID,X.TXT_NUM,X.TXT_TITLE,X.TXT_WRITER,X.TXT_DATE,X.TXT_HITS,X.TXT_CONTENT
       FROM ( SELECT A.rnum, A.TXT_ID,A.TXT_NUM,A.TXT_TITLE,A.TXT_WRITER,A.TXT_DATE,A.TXT_HITS,A.TXT_CONTENT
           FROM ( SELECT ROWNUM rnum, TXT_ID,TXT_NUM,TXT_TITLE,TXT_WRITER,TXT_DATE,TXT_HITS,TXT_CONTENT
          FROM NOTICEBOARD ORDER BY TXT_DATE DESC) A
           WHERE ROWNUM <= 20) X
       WHERE X.rnum >= 11

    이거는 22~ 11 이나오구요..

    SELECT X.rnum, X.TXT_ID,X.TXT_NUM,X.TXT_TITLE,X.TXT_WRITER,X.TXT_DATE,X.TXT_HITS,X.TXT_CONTENT
       FROM ( SELECT A.rnum, A.TXT_ID,A.TXT_NUM,A.TXT_TITLE,A.TXT_WRITER,A.TXT_DATE,A.TXT_HITS,A.TXT_CONTENT
           FROM ( SELECT ROWNUM rnum, TXT_ID,TXT_NUM,TXT_TITLE,TXT_WRITER,TXT_DATE,TXT_HITS,TXT_CONTENT
          FROM NOTICEBOARD ORDER BY TXT_DATE DESC) A
           WHERE ROWNUM <= 11) X
       WHERE X.rnum >= 20

    이값은 22~20 이나오네요..ㅠㅠ

    제가원하는건.. 3페이지인데.. 어떻게 쿼리문을 작성하면 3페이지가 나오게할수있을까요..ㅠㅠ

  • 또다른시작
    2k
    2017-01-01 14:04:35

    1~10 / 11~20 / 21~ 30 이렇게 보여주고싶은데 쿼리문작성하기 너무어렵네요.. 도와주세용 선배님들 ㅠ

  • 휘리리뿅
    1k
    2017-01-01 14:35:58


    SELECT 
    	* 
    FROM ( 
    		SELECT 
    			ROWNUM AS RNUM/*번호*/
    			, Z.*/*데이터*/ 
    		FROM ( 
    				SELECT 
    					* 
    				FROM 
    					테이블명 
    				ORDER BY 정렬기준
    			) Z 
    		WHERE 
    			ROWNUM <= 10/*마지막 번호*/ 
    	) 
    WHERE 
    	RNUM >= 1/*시작 번호*/;


  • 휘리리뿅
    1k
    2017-01-01 14:37:11

    잘되는데용?

  • 또다른시작
    2k
    2017-01-01 14:51:46

    전왜안되죠ㅠ.ㅠ... 적어주신거 해봤는데.. 제꺼랑 똑같이 나오네요.. 왜 중간페이지값만 안나올까요..

    다시말해서 1~10 / 11~20 / 21~30 이세페이지중에.. 맨앞페이지하고 맨뒤페이지는 나오는데..중간페이지가;

    적어주신 시작번호를 1 마지막번호를 10 하면  22~13 까지나오고요..

    시작번호를 11 마지막번호를 20 하면 22~11 까지나오고요..

    시작번호를 21 마지막번호를 30 하면 22~21 까지나오네요.. 결론으로 보면.. 첫페이지와 마지막페이지는 나온다는소리고.. 중간페이지가 이상합니다;;

  • 또다른시작
    2k
    2017-01-01 14:58:26

    아 아니구나 첫페이지만 나오는거네요! 이상하네요.. 왜첫페이지만나올까요...


    시작번호를 1 마지막번호를 10 하면 22~13은 맞는거고..


    시작번호를 11 마지막번호를 20 하면 12~2 가나와야되는거고..


    시작번호를 21 마지막번호를 30 하면 1 이나와야되는건데!!

    뭐가문제일까요..;;

  • 또다른시작
    2k
    2017-01-01 14:59:36

    이게되야 페이징한거 에서 파라미터 보내서 2페이지넘어갈때 두번째꺼 보여주는데.. 하.. 제가 잘못쓰고있는건가용...

  • 휘리리뿅
    1k
    2017-01-01 16:25:39

    일단 쿼리를 짜서 돌려보세요


    정상적으로 작동되면


    쿼리가 문제가 아니고


    앞단에서 조건문이 다르겟죠



    int end =  내가 선택한 페이지 번호 * 10

    int st = end - 9


    ex) 내가 페이지를 2를 선택했다


    int end = 2 * 10  = 20 <-- end 변수에 값은 20이 들어갈꺼고


    int st = end - 9 = 11 <-- st 변수에 11이 들어갈꺼고


    결국 쿼리 조건 시 추출하는 번호는 11 ~ 20



    SELECT 
    	* 
    FROM ( 
    		SELECT 
    			ROWNUM AS RNUM/*번호*/
    			, Z.*/*데이터*/ 
    		FROM ( 
    				SELECT 
    					* 
    				FROM 
    					테이블명 
    				ORDER BY 정렬기준
    			) Z 
    		WHERE 
    			ROWNUM <= #end#/*마지막 번호*/ 
    	) 
    WHERE 
    	RNUM >= #st#/*시작 번호*/;
  • 휘리리뿅
    1k
    2017-01-01 16:27:58

    일단 쿼리를 돌려서 조회해보세요


    내가 생각한 조건값을 넣고 조회를 할 때 과연 제대로 불러오는지


    불러오면 쿼리상 문제가 아니고 프로그램 로직상 문제겠지요


    로그나  system.out.print 찍어보세요



  • 또다른시작
    2k
    2017-01-01 17:12:55

    조회를 해보았는데 그렇습니다 쿼리문이 잘못된거같습니다.. 로그에서 보는게아니고 처음부터 워크시트에서봤기때문에 프로젝트랑 상관이전혀없습니다 즉 쿼리문제겠죠... 쿼리가 잘못된게 확실한데 어느부분이 잘못됐는지 잘 모르겠습니다..

  • 휘리리뿅
    1k
    2017-01-01 17:54:37

    지금 쿼리가 잘못되어있잖아요 


    제가 보내 준거는 밑에랑 같은데


    님은 지금 다르잖아요.....


    제가 떡하니 쿼리까지 적어줬는데


    테이블명에 테이블 넣고

    정렬기준에 정렬할 컬럼 넣고 돌려보세요


    SELECT 
    	* 
    FROM ( 
    		SELECT 
    			ROWNUM AS RNUM/*번호*/
    			, Z.*/*데이터*/ 
    		FROM ( 
    				SELECT 
    					* 
    				FROM 
    					테이블명 
    				ORDER BY 정렬기준
    			) Z 
    		WHERE 
    			ROWNUM <= #end#/*마지막 번호*/ 
    	) 
    WHERE 
    	RNUM >= #st#/*시작 번호*/;
  • 더미
    15k
    2017-01-02 12:21:02

    글쓴분 생각대로 sql짜는게 아니에요...

    rownum을  조회해야합니다

  • 또다른시작
    2k
    2017-01-02 23:01:46

    해결되었습니다 정말감사합니다 이런거하나하나 쩔쩔매는 저자신이 부끄럽네요.. 선배님들 존경하고 감사합니다..

  • 로그인을 하시면 답변을 등록할 수 있습니다.