개발 Q&A

제목 SQL 관련 질문입니다.
글쓴이 쿨가이8 작성시각 2013/01/11 00:47:23
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 16342   RSS
안녕하세요. 현재 sns를 개발해보며 CI 학습중인데요.
두 Table간 Join을 통해 Data를 가져오는데 애를 먹고 있어서 이렇게 질문 드립니다.

table A (no, user_id, thread_id, subject, contents) 
table B(no, board_id, user_id, name)
이렇게 field가 있습니다. 두 테이블은 thread_id와 board_id로 연결되어 있구요.
table A는 게시판의 글을 저장하는 table이구요, B는 사진을 저장하고 있는 table입니다.

table A의 경우 사진이 없는 row는 thread_id가 0으로 저장되고 사진이 있는 경우는 thread_id가 특정 값으로 채워지구요.
이 경우, 해당 thread_id와 동일한 board_id를 가진 row(사진 정보)가 table B에 n개 있을 수 있습니다.
(즉, 글 하나당 사진은 0~n개가 있을 수 있습니다.)

이 경우, 사진을 포함하던 포함하지 않던 내림차순으로 10개를 보여주고
사진이 포함된 경우는 당연히 사진을 보여주려 합니다.

thread_id가 0이 아닌 경우에만 table B에서 이애 매칭되는 사진 정보를 가져오고 싶은데,
(물론 thread_id가 0이어도 10개에는 포함되어야 합니다. 사진이 있는 글 있는글/없는글 포함 10개라서요.)
SQL을 어떻게 작성해야 할까요? 이것 때문에 계속 골머리를 썩고 있습니다.

고수님들 확인 부탁 드리겠습니다.

 


 다음글 서버에서 이미지 캐싱 관련 질문 (1)
 이전글 타서버에서 타서버 DB연결 (2)

댓글

우왕아항 / 2013/01/11 09:57:04 / 추천 0
비교적 간단한 쿼리가 될 것 같은데요.

SELECT A.*, B.name AS image_name FROM `TABLE_A` AS A
LEFT OUTER JOIN `TABLE_B` AS B ON A.thread_id = B.board_id
ORDER BY A.no DESC LIMIT 10;

돌려보진 않았지만 이 비슷한 느낌으로 작성하면 되지 싶습니다.

그리고 thread_id와 board_id는 외래키 연결인데
왠만하면 명칭은 통일하는 것이 모호함을 덜어줄 것 같네요
쿨가이8 / 2013/01/11 21:26:31 / 추천 0
답변 감사드립니다.
제가 처음 작성했던 Query가 위와 같은데요. (thread_id만 board_id로 수정하였습니다^^;)

$this->db->select('A.subject, A.contents, B.name');
$this->db->from(A);
$this->db->join('B', 'A.board_id = B.board_id', 'left outer');
$this->db->order_by('A.no', 'desc')->limit(10);
$query = $this->db->get();
$result = $query->result_array();

이 경우, A와 B의 관계가 1:n이다보니 
동일한 A.board_id에 다른 B.name을 가진 A.board_id | B.name row가 n개가 나오게 됩니다.
(즉, 같은 글이 사진 하나당 묶이는거죠.)

저는 글 하나에 사진 여러개를 포함시키도록 view를 구성하고 싶거든요.
마치 A.board_id는 group_by를 한 것처럼 말이죠.

흠 이건 어떻게 해야 할 수 있을까요?^^;;