그룹의 모든 게시판의 조회순으로 가지고오기[미친짓인거같은데..]
본문
제가 코딩에 부족함이 많아 여기에 질문을 드립니다.
어찌어찌하다가 그룹의 모든 게시판을 조회순으로 가지고 오는것을 만들었는데
너무 미친짓으로 코딩해 놓은거 같아서.. 저에게 조언 좀 주셨으면 하고 올렸습니다.
---------------------------------------------------------------------
//latest.lib.php
보시면 아시겠지만.. 모든 게시판을 for문으로 돌려서 아래 처럼 배열안에 배열입니다.
조회순으로 정렬해서 저는 각 게시판마다 10개를 조회순으로 정렬해서 가지고 오게 했습니다.
결과적으로 10개의 게시판에 무궁무진한 게시글을 wr_hit(조회순)으로 정렬해서 10개의 글을 가지고 오겠죠
이미 100개의 데이터를 가지고 왔습니다.
array{
array{
}
}
위와 같이 가지고 왔겠죠 10개를 근데.. 여기서 10개를 어떻게.. 합쳐서 즉 100개를 다시 합쳐서 정렬을 시키나!
고민을 하고 고민을 하고 해도 안되는겁니다..
그래서 찾은 함수 array_merge를 사용해서
$c 라는 배열로 하나의 함수로 만들어서 그것을 다시 조회순으로 정렬 했습니다.
이런 미친 코딩해서 사용해도 괜찮을까요...???
(참고로 신문사 홈페이지인데.. 즉 조회순으로 글 가지고 오기입니다.)
더 좋은 방법 있으면 말씀좀 부탁드립니다..
---------------------------------------------------------------------
latest.lib.php
---------------------------------------------------------------------
function latest4($skin_dir="", $bo_table, $rows=10, $subject_len=40, $options="")
{
global $g4;
if ($skin_dir)
$latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
else
$latest_skin_path = "$g4[path]/skin/latest/basic";
$list = array();
$list2 = array();
$sql2 = " select * from $g4[board_table] where gr_id = 'G01'"; //G01그룹 내의 모든 게시판
$result2 = sql_query($sql2);
for ($j=0; $row2 = sql_fetch_array($result2); $j++){ //모든 게시판을 배열로 돌립니다.
$list2[$j] = get_list($row2, $bo_table, $latest_skin_path, $subject_len);
$board = sql_fetch($sql2);
$tmp_write_table = $g4['write_prefix'] . $row2[bo_table]; // 게시판 테이블 전체이름
$sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_hit desc limit 0, $rows ";
$result = sql_query($sql);
for ($i=0; $row = sql_fetch_array($result); $i++){
$list[$j][$i] = get_list($row, $board, $latest_skin_path, $subject_len); //각 게시판의 조회순으로 정렬
$list[$j][$i][bo_table] = $list2[$j][bo_table]; //링크 때문에 배열에 넣음. 게시판 명
}
}
ob_start();
include "$latest_skin_path/latest.skin.php";
$content = ob_get_contents();
ob_end_clean();
return $content;
}
---------------------------------------------------------------------
latest.skin.php
---------------------------------------------------------------------
<?
$c = array_merge($list[0],$list[1],$list[2],$list[3],$list[4],$list[5],$list[6]);
foreach ($c as $key => $row) {
$aaa[$key] = $row[wr_hit];
}
array_multisort($aaa, SORT_DESC, $c);
reset($c);
?>
답변 1
전 보통 union all을 사용하기는 하는데,
(select *, a as table_name from a order by wr_hit desc limit 10) union all
(select *, b as_table_name from b order by wr_hit desc limit 10) union all
..
order by wr_hit desc
솔직히 귀찮아서 이리 쓰기는 하는데, 이게 정답이라고 말씀드리기는 어렵네요
답변을 작성하시기 전에 로그인 해주세요.