그룹 최신글 뽑을때 게시판 별로정렬(2000)[수정] > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

그룹 최신글 뽑을때 게시판 별로정렬(2000)[수정] 정보

그룹 최신글 뽑을때 게시판 별로정렬(2000)[수정]

본문

안녕하세요?
 
다음 문제가 안풀리고 있어서 중고수님들의 도움을 구합니다.
저번에도 좋은 답변 주신 분들 정말 감사히 생각하고 있습니다.
 
다음 함수를 이용해 그룹 최신글을 뽑고 있습니다. 카테고리 이름이 공지일 경우 제외하게 한것 외에는
수정한 것이 없습니다.
 
 
 
파일이름 : latest_gr_view.php
 

// 최신글 추출 - 선택한 그룹별로 원하는 수만큼 보여줌
function latest_group($skin_dir="", $gr_id, $bo_table, $rows=10, $subject_len=40, $category="", $orderby="", $options="")
{
 global $config;
 global $g4;

 /*        그릅명을 출력함    */
 // bo_table 값이 넘어올 경우 gr_id 를 축출한다.
 if($bo_table){
 $gr_id        = "";
 $board_sql    = " select bo_subject from {$g4[board_table]} where bo_table = '$bo_table'";
 
  
 $board_result = sql_fetch($board_sql);
 $gr_id       .= $board_result[gr_id];
 }
 
//bo_table || gr_id  가 넘어오지 않은경우
 if(!$bo_table && !$gr_id){
 $gr_id       = "notice";   // 메인에서 노출시킬경우 조정하세요.
 }
 
 // 그릅변수가 넘어왔을경우
 if($gr_id){ 
 $group_name = "";
 $group_sql    = " select gr_subject from {$g4[group_table]} where gr_id = '$gr_id'";
 $group_result = sql_fetch($group_sql);
 $group_name  .= $group_result[gr_subject];
 }

 $list = array();
 $limitrows = $rows;
 $sqlgroup = " select bo_table, bo_subject from $g4[board_table] where gr_id = '$gr_id' and  bo_use_search=1 order by bo_order_search";
 
 $rsgroup = sql_query($sqlgroup);

 if ($skin_dir)
 $latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
 else
 $latest_skin_path = "$g4[path]/skin/latest/basic";
 for ($j=0, $k=0; $rowgroup=sql_fetch_array($rsgroup); $j++) {
 $bo_table = $rowgroup[bo_table];
 
 
 // 테이블 이름구함
 $sql = " select * from {$g4[board_table]} where bo_table = '$bo_table'";
 $board = sql_fetch($sql);
 $tmp_write_table = $g4[write_prefix] . $bo_table; // 게시판 테이블 실제이름
 // 옵션에 따라 정렬
 $sql = "select * from $tmp_write_table where wr_is_comment = 0 and ca_name not like '공지'";
 $sql .= (!$category) ? "" : " and ca_name = '$category' ";
 $sql .= (!$orderby) ? "  order by wr_id desc " : "  order by $orderby desc, wr_id desc ";
 $sql .= " limit $limitrows";
 $result = sql_query($sql);
 for ($i=0; $row = sql_fetch_array($result); $i++, $k++) {
 if(!$orderby) $op_list[$k] = $row[wr_datetime];
 else  {
 $op_list[$k] = is_string($row[$orderby]) ? sprintf("%-256s", $row[$orderby]) : sprintf("%016d", $row[$orderby]);
 $op_list[$k] .= $row[wr_datetime];
 }
 $list[$k] = get_list($row, $board, $latest_skin_path, $subject_len);
 $list[$k][bo_table] = $board[bo_table];
 $list[$k][bo_subject] = $board[bo_subject];
 $list[$k][bo_wr_subject] = cut_str($board[bo_subject] . $list[$k][wr_subject], $subject_len);
 }
 }
 if($k>0) array_multisort($op_list, SORT_DESC, $list);
 if($k>$rows) array_splice($list, $rows);
 ob_start();
 include "$latest_skin_path/latest.skin.php";
 $content = ob_get_contents();
 ob_end_clean();
 return $content;
}
/// 함수 정의 끝
 
 
이때 추출된 내용에서는
 
각 게시판 별이 아닌,  $orderby 로 보낸 게시판 테이블 내의 값으로 정렬 할수는 있습니다.
 
그런데 게시판별로 정렬되지 않고 글 자체의 필드 변수 들로만  정렬이 가능합니다.
 
간단할줄 알고 $orderby를 bo_table나 bo_id로 해봤는데 에러가 나더군요
 
1054 : Unknown column 'bo_id' in 'order clause'
 
그래서 wr테이블 내에 보니까 그 보드의 이름필드는 없더군요 
 
 
 
이 소스를 특정 그룹의 각 게시판별로 정렬 되어서  4개 정도의 최신글로 나오도록 하고 싶습니다.
 
즉,
 
글 갯수 4개를 지정해 주면 지금은 이렇게 나오는데
 
 
[자유게시판] 쥐포 오징어                   - 07/02/03
 
[질문게시판] 쥐포 가 오징어 와같나요?- 07/02/03
 
[자유게시판] 오징어 세상                   - 07/02/02
 
[정보게시판] 건어물 가격정보             - 07/02/01
 
 
 
 
 
이렇게 게시판 별로 정렬해 주고 싶습니다.
 
 
[자유게시판] 쥐포 오징어                   - 07/02/03
 
[자유게시판] 오징어 세상                   - 07/02/02
 
[질문게시판] 쥐포 가 오징어 와같나요?- 07/02/03
 
[정보게시판] 건어물 가격정보             - 07/02/01
 
 
 
 
그룹별 최신글 (위의 함수) 수정으로 해결 하는 방법이 없을까요
 
답변 미리 감사합니다!
  • 복사

댓글 전체

답변감사합니다만, 1054 : Unknown column 'gr_id' in 'order clause'
에러가 납니다.
아마도 select * from $tmp_write_table 이기 때문에..
($tmp_write_table =  $g4[write_prefix] . $bo_table; //게시판 실제 이름)
여기저기 찾아 다니면서

$sqlgroup = " select bo_table, bo_subject from $g4[board_table] where gr_id = '$gr_id' and  bo_use_search=1 order by bo_order_search";

이부분을 group by bo_table 을 추가 하고

$sqlgroup = " select bo_table, bo_subject from $g4[board_table] where gr_id = '$gr_id' and  bo_use_search=1 group by bo_table order by bo_order_search";


$sql = "select * from $tmp_write_table where wr_is_comment = 0 and ca_name not like '공지'";

부분을 distinct wr_3  추가 하해서

$sql = "select distinct wr_3 from $tmp_write_table where wr_is_comment = 0 and ca_name not like '공지'";
로 해서 wr_3 필드 부분이 중복된 부분을 제외하고 나머지만 보여주고 싶은데 안되네요;;

아참,

$sql .= (!$orderby) ? "  order by wr_id desc " : "  order by $orderby desc, wr_id desc ";

요부분도

$sql .= (!$orderby) ? "" : "  order by $orderby desc, wr_id desc ";

로 $orderby가 전달되지 않았다면 아예 order by 를 하지 않도록 했습니다..

아.. 원하는 결과를 얻을 수가 없네요;;;
ㅎㅎ 원하는 결과를 얻었습니다!
이런 진짜 어이없는;;;;

맨 밑 부분에

if($k>0) array_multisort($op_list, SORT_DESC, $list);

$op_list로 정렬하는 부분이 있었네요;;;-.-
sql에서는 잘 분리해서 찾아놓고;;
정렬로 받아서 다시한번 sort 했네요;; 이부분을 아예 주석처리 하거나
아니면 걍 원하는 목적으로 정렬하니 원하는 출력이 나옵니다.
중간에 $limitrow 부분도 바꾸니 원하는 게시판에서 원하는 만큼만 뽑아내는 것도 가능하네요;;
 휴 이것때문에 왠 생초보 엄청 고생했습니다.;; html css php xml sqll까지 하게 생겼네요;;

웹디자이너 or 프로그래머 분들 진짜 고생하시는군요;;; 아니면 머리가 진짜 좋으시거나 ㅠ.ㅠ

계속 sql부분만 봤지 php부분을 체크 못하다니;;;
그런 의미에서 포인트2000 점은... 랜덤 추첨하여.. 쏘겠습니다.~  라고 말하려 했지만..
댓글 달아주신 분은 한분^^;;
root님 많이 고생하세요~~
© SIRSOFT
현재 페이지 제일 처음으로