답변 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년 전
�
플래토
7년 전
@lacomparte 네
$sql_common 에 일부분 필요한 문장만 추가한것이라서.
추가하실때
$sql_common .= " and wr_is_comment = '0' ";
와 같이 추가하셔야 할겁니다.
$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을 선택하는걸 누락했네요 (죄송~)
$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 구할때 써야하는건가요!?
적어주신 쿼리가 게시판에서
공지를 제외한 게시물 수를 가져오는 쿼리 같은데요.
이미 list.php 에
notice_count 가 있는게
굳이 따로 구하는 이유가 있을까요?;
그리고
위의 쿼리를 total_count 구할때 써야하는건가요!?
�
플래토
7년 전
@lacomparte
글의 리스트수를 구할때
그누보드의 뿐만 아니라. 대부분의 페이징 구하는 방식이
기본적인 조건절을 만들고
select 구문만
$sql 변수에 담아서
각기 다르게
결합시켜서 쿼리를 만드는 패턴을 갖고있습니다.
전체게시글수 의 쿼리문이 select count(*) ...
로 시작하는 select 앞구문이고
$sql_common 은
where 절 이하의 구문으로
결합되는 구조입니다.
제가 알려드린 쿼리는
질문에서 리스트에서 공지를 제외하고 페이징을 하고 싶으시다 하여
조건을 붙인겁니다.
total_count에서 정확한 조건이 되면 굳이 다르게 구할필요가 없죠
제가 드린건 원하시는 문에 적절하게 적용해서 사용하시라고 팁을 알려드린겁니다.
참고적인 내용이지 절대적인 적용점은 아닙니다.
구문을 원하시는 방향대로 변경하시다가 막힐때 참고하시는게 좋습니다.
글의 리스트수를 구할때
그누보드의 뿐만 아니라. 대부분의 페이징 구하는 방식이
기본적인 조건절을 만들고
select 구문만
$sql 변수에 담아서
각기 다르게
결합시켜서 쿼리를 만드는 패턴을 갖고있습니다.
전체게시글수 의 쿼리문이 select count(*) ...
로 시작하는 select 앞구문이고
$sql_common 은
where 절 이하의 구문으로
결합되는 구조입니다.
제가 알려드린 쿼리는
질문에서 리스트에서 공지를 제외하고 페이징을 하고 싶으시다 하여
조건을 붙인겁니다.
total_count에서 정확한 조건이 되면 굳이 다르게 구할필요가 없죠
제가 드린건 원하시는 문에 적절하게 적용해서 사용하시라고 팁을 알려드린겁니다.
참고적인 내용이지 절대적인 적용점은 아닙니다.
구문을 원하시는 방향대로 변경하시다가 막힐때 참고하시는게 좋습니다.
l
lacomparte
7년 전
자세히 설명해 주셔서 감사합니다~
잘 응용해서 사용하겠습니다 ^^
잘 응용해서 사용하겠습니다 ^^
댓글을 작성하려면 로그인이 필요합니다.
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페이지의 공지 수 만큼 중복 출력됩니다;
1페이지에는 공지, 30,29,28 번째 게시물이 오구요
2페이지에는 28,27,26 게시물이 와버립니다;
3페이지는 25,24,23 게시물이 오구요
즉 2페이지만 1페이지의 공지 수 만큼 중복 출력됩니다;
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
20이 나오네요
wr_is_comment 때문인것 같아
where 절에 추가해주었더니
13이 나옵니다;