테스트 사이트 - 개발 중인 베타 버전입니다

게시판 공지 갯수를 목록수에서 제외하고 싶습니다. 채택완료

lacomparte 7년 전 조회 3,563

관리자에서

 

게시판 목록수를 10개로 조정했는데요.

 

공지포함 10개가 아니라

공지제외 10개로 하려면 어디를 고쳐야 하나요?

 

$page_rows += $notice_count; 

 

하면

되긴하는데

2페이지 가면

1페이지의 마지막 게시물이 

2페이지의 첫번째 게시물로 와있습니다;

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
플래토
7년 전

게시판의 bo_table 명이  free 라고 가정하고

</p>

<p>$write_table = $g5['write_prefix'] . $bo_table;</p>

<p>$sql  = "select count(*) cnt from {$write_table} a ";</p>

<p>$sql_common = " where not exists (select 'x' from {$g5['board_table']} b where a.wr_id in (b.bo_notice) )";</p>

<p>$sql .= $sql_common;</p>

<p>

으로 해서 쿼리를 만들어보시면 공지글은 카운트하지 않습니다.

 

$sql 과

$sql_common

은 분리한건 알아서 잘 적절히 사용하셔야 할겁니다.

 

단, table명에 alias는 wrtie_table 에 a로 주셨는지

다른이름으로 주시면 위의 예제를 동일하게 변경하시면됩니다.

 

혹시라도 오류나면 알려주세요 저도 실행해보지 않고 작성해드린것이라서요

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 6개

l
lacomparte
7년 전
cnt 가 16이 되어야 하는데
20이 나오네요

wr_is_comment 때문인것 같아
where 절에 추가해주었더니
13이 나옵니다;
플래토
7년 전
@lacomparte 네
$sql_common 에 일부분 필요한 문장만 추가한것이라서.
추가하실때
$sql_common .= " and wr_is_comment = '0' ";
와 같이 추가하셔야 할겁니다.
플래토
7년 전
@lacomparte 아 제가 누락한게 있네요

$write_table = $g5['write_prefix'] . $bo_table;
$sql = "select count(*) cnt from {$write_table} a ";
$sql_common = " where not exists (select 'x' from {$g5['board_table']} b where b.bo_table = '{$bo_table}' and a.wr_id in (b.bo_notice) ) ";

$sql .= " and wr_is_comment = '0' ";

$sql .= $sql_common;

로 변경해보세요

g5_board 에서 bo_talble을 선택하는걸 누락했네요 (죄송~)
l
lacomparte
7년 전
답변 감사드립니다.
적어주신 쿼리가 게시판에서
공지를 제외한 게시물 수를 가져오는 쿼리 같은데요.

이미 list.php 에
notice_count 가 있는게
굳이 따로 구하는 이유가 있을까요?;


그리고
위의 쿼리를 total_count 구할때 써야하는건가요!?
플래토
7년 전
@lacomparte
글의 리스트수를 구할때
그누보드의 뿐만 아니라. 대부분의 페이징 구하는 방식이

기본적인 조건절을 만들고

select 구문만

$sql 변수에 담아서
각기 다르게

결합시켜서 쿼리를 만드는 패턴을 갖고있습니다.

전체게시글수 의 쿼리문이 select count(*) ...
로 시작하는 select 앞구문이고

$sql_common 은
where 절 이하의 구문으로

결합되는 구조입니다.

제가 알려드린 쿼리는

질문에서 리스트에서 공지를 제외하고 페이징을 하고 싶으시다 하여
조건을 붙인겁니다.

total_count에서 정확한 조건이 되면 굳이 다르게 구할필요가 없죠

제가 드린건 원하시는 문에 적절하게 적용해서 사용하시라고 팁을 알려드린겁니다.

참고적인 내용이지 절대적인 적용점은 아닙니다.
구문을 원하시는 방향대로 변경하시다가 막힐때 참고하시는게 좋습니다.
l
lacomparte
7년 전
자세히 설명해 주셔서 감사합니다~
잘 응용해서 사용하겠습니다 ^^

댓글을 작성하려면 로그인이 필요합니다.

l
7년 전

위에서 언급한 $page_rows += $notice_count; 이게 어디서 나오는건지 생각해보니 bbs/list.php에서 아마도 소스가 이거겠죠?

</p>

<p>// 공지글이 있으면 변수에 반영

if(!empty($notice_array)) {

    $from_record -= count($notice_array);</p>

<p>    if($from_record < 0)

        $from_record = 0;</p>

<p>    if($notice_count > 0)

        $page_rows -= $notice_count;</p>

<p>    if($page_rows < 0)

        $page_rows = $list_page_rows;

}</p>

<p>

그럼 공지제외 10개로 원하기 때문에 원하는 건 아마도 이게 아닐까요? 

</p>

<p>//    if($notice_count > 0)

//        $page_rows -= $notice_count;</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

l
lacomparte
7년 전
만약 page_rows 가 3이면

1페이지에는 공지, 30,29,28 번째 게시물이 오구요
2페이지에는 28,27,26 게시물이 와버립니다;
3페이지는 25,24,23 게시물이 오구요

즉 2페이지만 1페이지의 공지 수 만큼 중복 출력됩니다;

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인