채택완료

통합게시판 질문드립니다.

2017-12-11 (월) 16:48:05 3,217

안녕하세요 

제가 게시판을 통합해서 게시판에 가져오고 싶은데 그런 게시판 스킨이나 

아니면 게시판 어떤부분을 뜯어 고쳐야 될까요??

게시판 속성이 전부 다 달라서 어떤식으로 해야 될지 모르겠네요

제가 개발자가아니라 퍼블리셔인데 개발자공부를 하고 있는 중이라 지식이 많이 부족하네요 ㅠㅠ

아니면 페이지에 카테고리를 만들어 카테고리 클릭하면 그 게시판에 해당되는 게시판 리스트를

출력하고 싶은데 혹시 리스트만 가져올수 있나요?? 

최신글로 게시판 가져오려고 했더니 이미지와, 들고올수 있는 양이 정해져있어서 안되서 힘드네요 ㅠㅠ

개발자 선배님들 많은 조언 부탁드립니다. 

답변 3개 / 댓글 8개

채택된 답변
+20 포인트

직접 구현이 가능하신분이시면

g5_board 테이블에보면

bo_table이라는 필드에 각 게시판들이 있습니다.

조회를 2단계를 거쳐야죠

1. 조회를bo_table

2. 루프로 bo_table의 bo_table명을 추출 하면서

      sql문을 union all  합니다.

3. 루프 종료후

    union all 된 쿼리를 조회

   원하는 값들을 처리 

와 같이 처리하시면 됩니다.

비슷하지만 추천만 제외하면 원하시는 기능의 구현이 되는 쿼리/소스 구현한 내용입니다.

참고하세요

https://sir.kr/qa/218185?vpage=1#answer_218207

답변에 대한 댓글 2개

2017-12-11 (월) 17:11:10
감사합니다. 한번 해보겠습니다. 제가 출력을 원하는 페이지에 php로 wr_good 부분은 지우고 적어으면 될까요?
2017-12-11 (월) 17:36:40
아 ㅠㅠ 그냥 테스트페이지에 sql 문을 그대로
[code]
<?php
$sql = "select * from g5_board where bo_use_good = '1'";
$result = sql_query($sql)

$sqls = "";
while($row = sql_fetch_array($result)) {
if ($sqls != "") $sqls .= " union all \n";
$sqls .= " select ".$row[bo_table]." botable, a.* from g5_write_".$row[bo_table]." a where wr_good > 0 \n";
}

$result2 = sql_query($sqls);
while ($row = sql_fetch_array($result2)) {
echo "<a href='/bbs/board/php?bo_table=".$row[botable]."&wr_id=".$row[wr_id];
echo $row['wr_subject']."</a><br/>";
}
?>
[/code]

저렇게 적었을때 화면에 나오는지 궁금해서 적었는데 아무것도 안뜨네요 ㅠㅠ 홈페이지 오류만 나오던데 다른곳에 입력 해야 되는건가요???
Copy
$sql = "select * from g5_board where bo_table='brwork'";

이부분은

그누보드의 테이블 설정중에서

g5_write_brwork 테이블만 보려고한다는 표현입니다.

답변에 대한 댓글 5개

2017-12-11 (월) 18:06:38
저는 첫번째 while 문에서

botable, a.* from g5_write_".$row[bo_table]" a where wr_good > 0 \n

좋아요 누른 글을 찾는건 해석을 하는데 글의 리스트를 가져오는 부분을 어디에 적어야 될지 아직 감이 전혀 안잡히네요 ㅠㅠ

마지막 where 뒤에 wr_good 부분을 지우고 테이블명이나, bo_table="brwork" 를 적어도 안되서요...

아.. 이런문제가 생길때 위에 상사가 없다는게 너무 힘드네요 ㅠㅠ..........
2017-12-11 (월) 18:23:49
혹시 where 조건 여러개 넣으려면
[code]
<?php
select * from g5_board where bo_table='mediapol' AND bo_table='brwork' AND bo_table='mkwork'
?>
[/code]

이렇게 사용하게 맞나요??
@매력있데이
첫번째 sql 문은 게시판의 설정정보가 있는 테이블
g5_board 의 bo_table 값을 찾기 위함입니다.
테이블리스트 중에서 bo_use_good = '1' 은 추천기능이 활성화된 정보를 찾고

찾아진 Row들을 돌면서

각 테이블의 추천이 있는것을 찾아야겠죠
그것을

While문으로 한방쿼리를 만드는겁니다.

$sqls = ""
while ($row ........) {
if ($sqls != "") $sqls .= "union all"; // 여기는 선행된쿼리가 존재할때 union all 을 붙이는거구요

$sqls .= " select * from g5_write_".$row[bo_table]." a where 조건들......";
}
로 $sqls 문장을 만든후

$result2 = sql_query($sqls);
while($row2 = sql_fetch_array($result2)) {
// 조건에 해당되는 테이블들의 합에 해당되는 처리
// 위에서 order by 는 생략되어있습니다.
}

//와 같이 원하는 처리를 하면되죠

두번째로
bo_table 에where 조건들인데

bo_table = 'mediapol' 이면서
bo_table = 'brwork' 인것은

절대 존재하지 않죠

g5_board 테이블에 1row 별로 bo_table 값은 1개 밖에 없으니까요
둘다 해당되는건 나타날수가 없는거죠

하고싶은걸 구현하려면
and 가 아닌
or로 구현해야 합니다.

또는
bo_table in ('mediapol','brwork') 과 같이 in 으로 구성해야겠죠

where절 뒤에 복합조건은 맞지만
and는 내용을 추리고추리고추릴때
or는 이것도 나오고 저것도 나오고 할때
in은 이것과 저것이 필요할대

라고 봐야합니다.
2017-12-12 (화) 12:38:06
아 감사합니다. 제가

[code]
<?php
include_once('../common.php');
include_once('../head.php');

// $row = sql_fetch("select * from g5_board where bo_table in ('brwork','mkwork','mediapol') ");
// echo $row[bo_table];

$sql = "select * from g5_board where bo_table in ('mediapol','brwork','mkwork')";
$result = sql_query($sql);

$sqls = "";
while($row = sql_fetch_array($result)) {
if ($sqls != "") $sqls .= " union all \n";
$sqls .= "select * from g5_write_".$row[bo_table]." where wr_id > 0";
}

$result2 = sql_query($sqls);
while ($row = sql_fetch_array($result2)) {
echo "<a href='/bbs/board/php?bo_table=".$row[bo_table]."&wr_id=".$row[wr_id];
echo $row['wr_subject']."</a><br/>";
}
?>
<?
include_once('../tail.php');
?>
[/code]

이렇게 페이지에 입력했는데 빈내용이 나오던데 어떤 문제가 있는걸 까요??

ㅠㅠ

result2 이부분이 잘못 된걸 까요???

아..많이 질문 드려서 죄송합니다.
@매력있데이

우선
g5_write_테이블

여기에는 bo_table 필드가 없습니다

당연히 빈값이 나올겁니다.


제가 위에서

select ".$row[bo_table]." botable, a.* from g5_write_".$row[bo_table]" a where wr_good > 0
이렇게
표기한데는 이유가 있습니다.


두번째
위의 쿼리로 구현한건 bo_table의 값을 상위테이블에서 불러서 셋팅하기 위함입니다.
그리고, wr_id > 0 은 없어도 되는 코드이고
wr_good > 0 은 추천이 1이라도 있는것을 표현한겁니다.

상단의 다른 내용없이 저것만 파일로 구성하시면 오류나올겁니다.

테스트 페이지를 구성하신 경로도 확인하셔야 하구요

그루보드 설치 디렉토리라고 가정하고 

보통  맨위 상단에

include_once("./_common.php");

이걸 적으셔야 다른것들도 작동가능합니다.

답변에 대한 댓글 1개

2017-12-11 (월) 17:53:24
아 제가 코드 쓸때 head common 부분을 안적어 드리고 올렸습니다.
[code]
$sql = "select * from g5_board where bo_table='brwork'";
$result = sql_query($sql)
[/code]

이 두줄을 적었을때는 오류가 안나는데

그 아래줄
[code]
$sqls = "";
while($row = sql_fetch_array($result)) {
if ($sqls != "") $sqls .= " union all \n";
$sqls .= " select ".$row[bo_table]." botable, a.* from g5_write_".$row[bo_table]" a where wr_good > 0 \n";
}

$result2 = sql_query($sqls);
while ($row = sql_fetch_array($result2)) {
echo "<a href='/bbs/board/php?bo_table=".$row[botable]."&wr_id=".$row[wr_id];
echo $row['wr_subject']."</a><br/>";
}
[/code]

이부분을 적으면 오류가 나네요 ㅠㅠ

botable, a.* from g5_write_".$row[bo_table]" a where wr_good > 0 \n

위의 부분을 어떻게 고쳐야될까요?? where뒤에 bo_tale="brwork" 이렇게 테이블 명을 적어야 되나요?? mysql 명령어도 좀 찾아보고 수정 하고 싶은데 저부분이 어디를 뜻하는건지 찾지를 못하겠네요 ㅠㅠ

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