두 게시판의 조회수순으로 latest 만들기 정보
두 게시판의 조회수순으로 latest 만들기본문
질문을 올렸었는데 삭제가 된것 같네요.
갤러리 게시판을 2개 사용하여 여기서 조회수 높은 글을 가져와 최신글 형식처럼
보여 주려합니다.
일단 두 게시판의 내용을 latest.lip.php의 함수의 쿼리를 Union 으로 변경,
내용을 약간 수정하여 만들려 합니다.
쿼리 내용은 정상적으로 불러오는 것 같은데, latest에서 list 형식으로 뿌려주는
get_list 함수에서 하나의 보드($board)만 입력 받아 처리가 되어 latest의 링크가
하나의 보드로만 지정되어 링크가 됩니다.
물론 이미지도 그렇게 불러오는 것 같습니다.
DB 테이블은 charge, nocharge 두개의 테이블이며
가져오는 아이디 값(wr_id)은 charge에서 1, nocharge에서 14, 15, 16, 17 이렇게
총 5개의 값을 가져 옵니다.
그러나 링크 값은 charge 1, 14 ,15 16, 17로 링크가 됩니다.
하나의 게시판을 두가지 분류로 나누어 사용해도 되나, head 인클루드가 서로
다른 파일이고, 관리의 편의 및 확장성을 주기 위해 latest 함수를 고치기로
하였는데, 잘 안되네요.
latest 함수를 잘 수정하면 될 듯한데, 능력 부족으로 헤메고 있습니다.
고수님들의 답변을 부탁드립니다.
수정 latest 함수----------------------------------------------------------------
function latestImg($skin_dir="", $bo_table01, $bo_table02, $rows=10, $subject_len=40, $options="") // 보드명 2개를 인자로 받고 option으로 조회수(wr_hit) 등으로 확장성을 주었음
{
global $g4;
{
global $g4;
if ($skin_dir)
$latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
else
$latest_skin_path = "$g4[path]/skin/latest/basic";
$latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
else
$latest_skin_path = "$g4[path]/skin/latest/basic";
$list = array();
$sql = " select * from $g4[board_table] where bo_table = '$bo_table01' OR bo_table = '$bo_table02'";
$board = sql_fetch($sql);
$sql = " select * from $g4[board_table] where bo_table = '$bo_table01' OR bo_table = '$bo_table02'";
$board = sql_fetch($sql);
$tmp_write_table01 = $g4['write_prefix'] . $bo_table01; // 첫번째 게시판 테이블 전체이름
$tmp_write_table02 = $g4['write_prefix'] . $bo_table02; // 두번째 게시판 테이블 전체이름
$sql = "SELECT * FROM $tmp_write_table01 UNION ALL SELECT * FROM $tmp_write_table02 ORDER BY $options DESC LIMIT 0, $rows";
//explain($sql);
$result = sql_query($sql);
$tmp_write_table02 = $g4['write_prefix'] . $bo_table02; // 두번째 게시판 테이블 전체이름
$sql = "SELECT * FROM $tmp_write_table01 UNION ALL SELECT * FROM $tmp_write_table02 ORDER BY $options DESC LIMIT 0, $rows";
//explain($sql);
$result = sql_query($sql);
for ($i=0; $row = sql_fetch_array($result); $i++)
$list[$i] = get_list($row, $board, $latest_skin_path, $subject_len); // 보드 하나만 지정하여 값을 넘김
usort( $list, 'hitcmp');
$list[$i] = get_list($row, $board, $latest_skin_path, $subject_len); // 보드 하나만 지정하여 값을 넘김
usort( $list, 'hitcmp');
ob_start();
include "$latest_skin_path/latest.skin.php";
$content = ob_get_contents();
ob_end_clean();
include "$latest_skin_path/latest.skin.php";
$content = ob_get_contents();
ob_end_clean();
return $content;
}
function hitcmp( $a, $b) {
return intval( $b) - intval( $a); // DESC
}
}
function hitcmp( $a, $b) {
return intval( $b) - intval( $a); // DESC
}
해결 방법이 있을가요???
댓글 전체
http://sir.co.kr/bbs/tb.php/g4_qa/25536
다시 해 보세요.
다시 해 보세요.
답변 주셔서 감사합니다.
UNION 구문에 문제는 없는 것으로 보입니다.
rolo 님께서 알려주신 UNION 구문에 첫번째 Order by가 오류가 나서 찾아보니 Union 구문 사용시 Order by 는 한번만 쓰이는 것을 알게 되어 해당 구문을 삭제후 문제 없이 값을 가져 오는 것을 확인 했으나,
문제는 보드명에 가져온 값의 글 아이디와 매치시키는 부분인데, get_list 함수에서 하나의 보드만 가져온다는 것입니다.
get_list 에서 $board 가 배열로 넘어가 해당 아이디와 매치를 해야 하는데, 이 부분이 안되는 것 같습니다.
get_list 함수 혹은 다른 코드 변경으로 매치 시키는 방법을 찾고 있습니다.
UNION 구문에 문제는 없는 것으로 보입니다.
rolo 님께서 알려주신 UNION 구문에 첫번째 Order by가 오류가 나서 찾아보니 Union 구문 사용시 Order by 는 한번만 쓰이는 것을 알게 되어 해당 구문을 삭제후 문제 없이 값을 가져 오는 것을 확인 했으나,
문제는 보드명에 가져온 값의 글 아이디와 매치시키는 부분인데, get_list 함수에서 하나의 보드만 가져온다는 것입니다.
get_list 에서 $board 가 배열로 넘어가 해당 아이디와 매치를 해야 하는데, 이 부분이 안되는 것 같습니다.
get_list 함수 혹은 다른 코드 변경으로 매치 시키는 방법을 찾고 있습니다.
일단 요렇게 한번 해보세요...
$sql = "SELECT * FROM $tmp_write_table01 UNION ALL SELECT * FROM $tmp_write_table02 ORDER BY $options DESC LIMIT 0, $rows";
||
V
$sql = "select * from $tmp_write_table01 union all select * from $tmp_write_table02 order by wr_hit desc limit 0,10";
$result = sql_query($sql);
그 담에...
좋은 방법이.. 떠오르지 않네요...
스킨에서..
<?
echo $list[$i][icon_reply] . " ";
#####################################################
// join을 하지않고...
// union all로 distinct 를 안하는 스타일로 게시판을 통합해서 쿼리를 하고
// get_list함수를 이용하려면 wr_id,wr_hit,wr_subject 를 기준으로
// 두 테이블중에 하나에서 쿼리하고 없으면 다른 테이블로 링크를 줘야만 될듯합니다.
// 각각의 테이블이 테이블명을 가지고 있지 않기때문에 {$list[$i][href]} 에서 쿼리된
// 결과를 링크할때 무조건 $bo_table 로 하기에.. 최선아니면 차선이죠..
// 제목까지 잘랐으니 거의 올바른 경로가 될지..싶은데..
// 2006.06.19 dalsoo.
$this_id=""; $this_id_name=""; $sub_before_cut="";
$sub_length=strlen($list[$i][subject]);
$sub_before_cut=trim(substr($list[$i][subject],0,$sub_length-4));
$this_id=
@mysql_result(@mysql_query("select wr_id,wr_hit, wr_subject from $tmp_write_table01 where "
."(wr_subject like '$sub_before_cut%' and wr_id='{$list[$i][wr_id]}' and wr_hit='{$list[$i][wr_hit]}' "
."and wr_is_comment=0)"),0,0);
//두번째 테이블에 제목+조회수+글번호가 일치하지 않으면 링크는 첫번째테이블이다.
if($this_id !="")$list[$i][href]=str_replace("$bo_table02","$bo_table01",$list[$i][href]);
//게시판:제목
$this_ql="select bo_subject,bo_table from g4_board where bo_table ";
if($this_id !="") $bo_table="$bo_table01"; else $bo_table="$bo_table02";
$this_id_name=@mysql_result(@mysql_query("$this_ql= '$bo_table'"),0,0);
echo "[<a href='{$list[$i][href]}'><font color='green'>$this_id_name</font></a>] <a href='{$list[$i][href]}'>";
if ($list[$i][is_notice])
.
.
(이하동일)
$sql = "SELECT * FROM $tmp_write_table01 UNION ALL SELECT * FROM $tmp_write_table02 ORDER BY $options DESC LIMIT 0, $rows";
||
V
$sql = "select * from $tmp_write_table01 union all select * from $tmp_write_table02 order by wr_hit desc limit 0,10";
$result = sql_query($sql);
그 담에...
좋은 방법이.. 떠오르지 않네요...
스킨에서..
<?
echo $list[$i][icon_reply] . " ";
#####################################################
// join을 하지않고...
// union all로 distinct 를 안하는 스타일로 게시판을 통합해서 쿼리를 하고
// get_list함수를 이용하려면 wr_id,wr_hit,wr_subject 를 기준으로
// 두 테이블중에 하나에서 쿼리하고 없으면 다른 테이블로 링크를 줘야만 될듯합니다.
// 각각의 테이블이 테이블명을 가지고 있지 않기때문에 {$list[$i][href]} 에서 쿼리된
// 결과를 링크할때 무조건 $bo_table 로 하기에.. 최선아니면 차선이죠..
// 제목까지 잘랐으니 거의 올바른 경로가 될지..싶은데..
// 2006.06.19 dalsoo.
$this_id=""; $this_id_name=""; $sub_before_cut="";
$sub_length=strlen($list[$i][subject]);
$sub_before_cut=trim(substr($list[$i][subject],0,$sub_length-4));
$this_id=
@mysql_result(@mysql_query("select wr_id,wr_hit, wr_subject from $tmp_write_table01 where "
."(wr_subject like '$sub_before_cut%' and wr_id='{$list[$i][wr_id]}' and wr_hit='{$list[$i][wr_hit]}' "
."and wr_is_comment=0)"),0,0);
//두번째 테이블에 제목+조회수+글번호가 일치하지 않으면 링크는 첫번째테이블이다.
if($this_id !="")$list[$i][href]=str_replace("$bo_table02","$bo_table01",$list[$i][href]);
//게시판:제목
$this_ql="select bo_subject,bo_table from g4_board where bo_table ";
if($this_id !="") $bo_table="$bo_table01"; else $bo_table="$bo_table02";
$this_id_name=@mysql_result(@mysql_query("$this_ql= '$bo_table'"),0,0);
echo "[<a href='{$list[$i][href]}'><font color='green'>$this_id_name</font></a>] <a href='{$list[$i][href]}'>";
if ($list[$i][is_notice])
.
.
(이하동일)
우선 수정해 주세요.
function hitcmp( $a, $b) {
return intval( $b['wr_hit']) - intval( $a['wr_hit']); // DESC
}
function hitcmp( $a, $b) {
return intval( $b['wr_hit']) - intval( $a['wr_hit']); // DESC
}
UNION과 order by에서 hit로 정열해 주니 usort()는 필요 없겠네요.
단지 query문을 조금 수정해서 $list에 bo_table이 들어 가도록 해야겠습니다.
$sql = "SELECT *, $bo_table1 bo_taable FROM $tmp_write_table01 UNION ALL SELECT *, $bo_table1 bo_taable FROM $tmp_write_table02 ORDER BY $options DESC LIMIT 0, $rows";
bo_table 을 추가하고, get_list 파라미터를 수정하면
$list[$i] = get_list($row, $list['bo_table'], $latest_skin_path, $subject_len);
단지 query문을 조금 수정해서 $list에 bo_table이 들어 가도록 해야겠습니다.
$sql = "SELECT *, $bo_table1 bo_taable FROM $tmp_write_table01 UNION ALL SELECT *, $bo_table1 bo_taable FROM $tmp_write_table02 ORDER BY $options DESC LIMIT 0, $rows";
bo_table 을 추가하고, get_list 파라미터를 수정하면
$list[$i] = get_list($row, $list['bo_table'], $latest_skin_path, $subject_len);
달수님, rolo님 답변 감사합니다.
rolo님 제가 잘 몰라서 그러는데 쿼리문이 조금 이상한거 같습니다.
말씁하신대로 쿼리에서 테이블 명을 가져오면 될 것 같은데 가져오는 방법을 모르겠습니다.
Select 다음에 $bo_atable1 bo_table로 되어 있는데, 이게 컬럼명 불러오는거 아닌가요?
실력이 안되서 계속 질문을 드리게 되어 죄송합니다.
rolo님 제가 잘 몰라서 그러는데 쿼리문이 조금 이상한거 같습니다.
말씁하신대로 쿼리에서 테이블 명을 가져오면 될 것 같은데 가져오는 방법을 모르겠습니다.
Select 다음에 $bo_atable1 bo_table로 되어 있는데, 이게 컬럼명 불러오는거 아닌가요?
실력이 안되서 계속 질문을 드리게 되어 죄송합니다.
또 오타군요. 컨디션이 안 좋은가 봅니다.
SELECT *, '$bo_table1' bo_table FROM $tmp_write_table01
SELECT A.*, '$bo_table1' bo_table FROM $tmp_write_table01 A UNION ...
뒤쪽 select도 수정해 주세요.
SELECT *, '$bo_table1' bo_table FROM $tmp_write_table01
SELECT A.*, '$bo_table1' bo_table FROM $tmp_write_table01 A UNION ...
뒤쪽 select도 수정해 주세요.
rolo님 답변 감사합니다.
조금만 더하면 잘 작동하겠네요 ^^
보드값이 6자로 한정되고, get_list에서 $row['bo_table'] 로 넘기니 에러가 나네요
이제 조금 시간적 여유가 나니, 제가 한번 잡아보겠습니다.
계속 답변 주셔서 감사합니다.
달수님 것은 차선책으로 생각했었는데, 지금 사용하는게 아무래도 잘 될거 같네요..
달수님의 답변에도 감사드립니다.
조금만 더하면 잘 작동하겠네요 ^^
보드값이 6자로 한정되고, get_list에서 $row['bo_table'] 로 넘기니 에러가 나네요
이제 조금 시간적 여유가 나니, 제가 한번 잡아보겠습니다.
계속 답변 주셔서 감사합니다.
달수님 것은 차선책으로 생각했었는데, 지금 사용하는게 아무래도 잘 될거 같네요..
달수님의 답변에도 감사드립니다.
php 운을 빕니다.