SQL고수님께.. 게시판을 한번에 읽어 올때..

SQL고수님께.. 게시판을 한번에 읽어 올때..

QA

SQL고수님께.. 게시판을 한번에 읽어 올때..

본문

사진과 같이 읽어 왔으면 합니다.

 


select * from gr_write_테이블 where wr_is_comment = 0 order by wr_num
select * from g5_board_file where bo_table = 테이블 and where wr_id = 해당 게시글 order by bf_no

 

으로 게시판 다 읽어 오는데..

 

사진이 있다고 하면 어떻게 읽어와야 하나요?  하나의 SQL문장으로 했으면 합니다.

 

{ wr_id : 1

files: [

{

bf_file:

},

{

bf_file:

}

]

},

{wr_id: 2

}

JSON으로 했을 때  위와 같이 나와야 되는데. SQL 한문장으로 가능할까요? 

이 질문에 댓글 쓰기 :

답변 4

​query 하나로 한 게시판의 게시물들을 파일 정보와 함께 읽어오고 싶으신 건가요?

 

 
SELECT bt.wr_id, bt.wr_subject, ft.bf_no, ft.bf_file FROM g5_write_게시판아이디 AS bt 
LEFT JOIN g5_board_file AS ft ON bt.wr_id = ft.wr_id 
WHERE ft.bo_table = '게시판아이디'
ORDER BY bt.wr_num, ft.bf_no
 

 

이런식으로 하시면 될텐데.. 문제는 파일이 여러개면 같은 wr_id 인 row 가 여러개 fetch 됩니다.

PHP 코드로 살짝 손보셔야 할겁니다. 

첨부 파일이 여러개일때는 첨부파일에 따른 메인이 같이 붙어 오는 것 같네요..
즉 하나의 메인에 첨부가 여러개 오는 것은 한의 SQL로 안된다는 것이죠..

LEFT JOIN을 더 공부해봐야 될것 같습니다. 감사합니다. 


SELECT bt.*, ft.bf_no, ft.bf_file FROM g5_write_notice AS bt LEFT OUTER JOIN g5_board_file AS ft ON (bt.wr_id = ft.wr_id  and ft.bo_table = 'notice') where wr_is_comment=0 ORDER BY bt.wr_num

위와 같이 읽어와서  사진이 1개 이상인 곳의 wr_id로 제거해서 주면 될것 같네요..

foreach($arr as $k => $v) 
{
    foreach($arr as $key => $value) 
    {
        if($k != $key && $v['wr_id'] == $value['wr_id'])
        {
             unset($arr[$k]);
        }
    }
}
//print_r($arr);

sql 한문장이 아니더라도 하나의 array 에 결과값을 짜집기해서 넣고 json 으로 변환하면 위와 같이 뽑을수 있습니다.

파일이 몇개인지 모르는 상황에서 한문장으로 하려면 서브쿼리나 left join 으로 뽑아서 php 에서 루프돌리면서 필터링해야 하는데 DB부담도 부담이고, 오히려 효율적이지 않습니다. 

답변을 작성하시기 전에 로그인 해주세요.
전체 78
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT