게시판 글 번호 구하기 Show 게시판 페이징을 구현하고 나서 각 페이지에 글 번호를 주어야 하는데 여러 방법이 있을수도 있는데 나는 이렇게 했다. 우선 준비물은 3가지 ※ buy는 제가 구매게시판을 만드느라 붙였습니다. $page //페이징 번호이다. 1페이지 2페이지 ... $buyCnt //쿼리를 이용해 row로 숫자를 구한다. ex)$buyCnt = mysql_num_rows($buyRs); mysql_num_rows() 함수는 row갯수를 구해준다. row는 한 페이지에 몇 개의 글 목록을 보여주는지 결정해준다. $buyTotalCount //db에 있는 총 게시글 갯수이다. 구하는 방법은 $countSql = "select count(*) cnt from 게시판DB명; $countRs = mysql_query($countSql); $countData = mysql_fetch_array($countRs); $buyTotalCount = $countData['cnt']; 이런식으로 구해주면 총 몇 개의 글이 있는지 숫자로 보여준다. 우선 나는 $buyCnt가 50이 나왔으니 한 페이지당 50개씩 글 목록을 불러온다. 먼저 완성소스이다. //결과 출력 <? for($i=0;$i < $buyCnt;$i++){ $buy = mysql_fetch_array($buyRs); if($buyCnt != 50) //글 목록이 50개가 아니라면 $buyCnt = 50; //50개라 가정하고 계산 $buyNum =$buyTotalCount-($buyCnt*($page-1)); $Num = $buyNum - $i; if($Num <= 0){ //글 번호가 0보다 같거나 작으면 //아무것도 실행하지 않음으로써 열을 다 지운다. }else{?> //0보다 큰 경우면 <tr> <td><?=$Num?></td> //글 번호 출력 </tr> <?} }?> 설명을 하자면 500개의 글 들이 있다고 가정할때 1페이지의 첫번째 게시글 번호는 500번이어야 한다. 이걸 계산하기 위해 $buyNum =$buyTotalCount-($buyCnt*($page-1)); 500 = 500 - ( 50 * (1-1)); 2000번이 나온다. 그럼 이걸 가지고 하나씩 감소시키면 저절로 아래 글들의 번호가 매겨진다. $Num = $buyNum - $i; 499 =500 - 1; 이렇게 두번째 글의 번호는 1999번이 된다. 그럼 2페이지 라면? 1페이지에서 50개를 이미 보여줬으니 50개를 빼고 시작해야 한다. 4950 = 500- (50 * (2-1)); 이러면 2페이지는 1950부터 시작하게된다. 같은 방법으로 1950부터 쭉 내려간다. 그리고 이 결과를 웹페이지 테이블에 글 번호 행에다가 넣어주면 된다. 그런데 마지막이 문제다. 한 페이지에 50개씩 보여줘야 되는데 마지막 페이지(10페이지라고 가정)에는 18개밖에 없다고 하자. 그럼 계산 값이 이상하게 나오게 된다. 338 = 500 - (18 * (10-1)); 마지막 페이지가 338번부터 시작하는 것이다. 원래대로라면 50 = 500 - (50 * (10-1)); 이렇게 깔끔하게 50번부터 시작해서 1번까지 있어야 한다. 이러한 예외처리를 위해 조건을 걸어준다. if($buyCnt != 50) //글 목록이 50개가 아니라면 $buyCnt = 50; //50개라 가정하고 계산 이렇게 해주면 마지막 페이지는 50번 부터 시작하게 된다. 하지만.. 글은 18개 밖에 없는데 50개를 출력해야하니 이런 현상이 나타난다. 이렇게 아무 값도 없는데 음수로 테이블 출력한다. 이를 방지하고자 조건을 또 걸어준다. if($Num <= 0){ //글 번호가 0보다 같거나 작으면 //아무것도 실행하지 않음으로써 열을 다 지운다. }else{?> //0보다 큰 경우면 <tr> <td><?=$Num?></td> //글 번호 출력 <td><?=$Date?></td> //글 작성날짜 </tr> <?} $Num 은 글 번호이다. 이게 0보다 같거나 작을때 아무처리를 해주지 않으면 0부터 음수는 알아서 출력하지 않는다. 즉 if($Num <= 0){ } 이렇게 그냥 대괄호 안에 아무것도 안 써준다. 그리고 else 부분에서 글 번호가 양수이면 테이블을 출력하게 한다. 그러면 결과는 이렇게 1까지만 나오게 된다. 이런식으로 글 번호를 줄 수 있다. 웹개발을 해본 개발자라면 게시판을 한번이상은 개발해보았을 것이다. 하지만 PK값이 숫자가 아닌 다른값이라던가 혹은 고객사의 요청으로 No값을 DB에있는 값이 아닌 순수 게시글의 순번을 보여달라는 요구사항이 들어올 수 있다. 실제로 필자는 이러한 요구사항을 받은적이 있다. 개발환경
데이터 준비게시판 테이블을 만들어서 페이징을 위해 100개의 데이터를 넣었다. 페이징 객체 생성페이지를 이동해도 순번이 잘 나오는지 테스트하기위해 페이징 클래스를 생성하였다. JAVA 코드 및 XML 쿼리작성페이징 처리를 하기위해 게시글의 총 갯수와, 게시글 목록을 조회하자. 화면에 게시글 목록보이기화면에는 정상적으로 페이징처리가 되있는 게시글목록을 10개씩 끊어와 보여주였다. 을 보여주었다. 순번으로 변경페이지를 2,3,4 1페이지씩 넘어갈때마다 순번이 정상적으로 나오는지 확인되었다. 위 HTML파일의 17, 18 Line의 코드를 위의 사진과 변경하였다. 이제 순번을 구하는 공식을 알아보자.
여기서 로우인덱스란 for문으로 list에 있는 데이터를 하나씩 꺼내올때의 인덱스번호를 말한다. 현재페이지에 - 1을 하는 이유는 게시글의 총 갯수의 값을 화면 1페이지 최상단 No값에
세팅하기 위함이다. 총갯수 = 100, 현재 페이지 = 2, 화면당 게시글 로우행 수 = 5-1을 했을 경우-1을 하지않을 경우정상적으로 테스트가 완료되었다. |