개발 Q&A

제목 알고리즘 질문입니다.
글쓴이 수야디벨 작성시각 2012/12/12 18:28:12
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 15717   RSS


지금 구현하려고 하는 부분에 대한 알고리즘 생각에 머리가 쥐가 날거같아서,

선배님들의 의견을 들어보고자 합니다~



우선, 제가 구현하려고 하는 부분은 게시판인데요!

쉽게 말해서 게시판의 제목과 작성자, 내용 글 과 그 게시물의 댓글을 갤러리처럼 보여주려고 합니다.

여기서 갤러리처럼이 무슨 말인고 하면 ..

제목 : 질문있습니다  작성자: 수야디벨 날짜: 2012 -- ** **
내용 : 아 정말 어렵네요!

댓글 :
TEST01 : 열심히 하시면 되요^^
TEST02 : 저도 너무 어렵군요 ..



처럼, 게시물의 글과 댓글이 한눈에 보이는 형식이에요.
 


그런데 여기서 깊은 고뇌에 빠졌습니다 .ㅠ


바로 게시물과 댓글이 서로 다른 테이블에 존재하는데요.

AJAX로 뿌려줄때 DB에서 Board 테이블과 reply 테이블을 조인하여 db를 가져옵니다.

즉 저 빨간 부분과 주황부분은 서로 다른 테이블이라는거지요.

서로 다른 테이블에 대한 정보를 한번에 가져오기 위해서는 join문 밖에 답이 없었습니다.


그런데 여기서 문제에요.

게시물 테이블과 (board) 리플테이블(board)은 공통의 b_no 라는 속성을 가집니다.

b_no는 게시물의 번호로써, 게시물이 등록 될 때 auto_increment로 값이 저절로 증가하는 값이에요.

이 값이 동일하게 두 테이블에 입력이 됩니다.

따라서 join을 할때도 b_no 라는 컬럼을 기준으로 join을 하는데요.

(이렇게 조인을 하는 이유는 어떤 게시물에 달린 댓글인지, 구별 할 수 있기 때문입니다)


여기서 문제가 되는게 뭐냐면,

댓글이 달리지 않은 게시물은 db에서 뽑아낼수 없다는겁니다 ㅠ




하나의 view 페이지가 있을때,

제목 : 질문있습니다 작성자: 수야디벨 날짜: 2012 -- ** **
내용 : 아 정말 어렵네요!

댓글 :
TEST01 : 열심히 하시면 되요^^
TEST02 : 저도 너무 어렵군요 ..


이런형식의 view를 댓글이 있든 없든, 그 유무에 상관 없이

db에 뽑아낸 값을 json 으로 처리해서 ajax에 뿌려주기 때문에,

저렇게 join문을 쓰면, 댓글이 달리지 않은 게시물은 뽑아낼 수가 없어요



그렇다고 다른 방법을 쓰자니 , ' 댓글을 각 게시판에 맞게 뽑아낼 수가 없어요' (어떠한 게시물에 달린 댓글인지 구분을 할 수가 없어요)
하 .. 어떻게 방법이 없을까요~?

 다음글 디비설계 질문드려요~~ (4)
 이전글 DB에서 현재시간 가져오기? (4)

댓글

수야디벨 / 2012/12/12 18:45:01 / 추천 0
// 자답입니다.

해결했습니다 ~!

해결 방법은 , 일반 join문이 아닌 left join문을 사용하는거였어요~


같은 join이라도 기능이 다르네요.

저도 정확히 leftjoin이 뭔지 몰라서, 설명은 드리지 못하지만

나중에 저와 같은 고민을 하시는 분들에게 조금이라도 도움이 되길 바라며 남깁니당
헛발이 / 2012/12/12 18:49:26 / 추천 0
일단 두가지를 아셔야 할듯 싶네요..

LEFT JOIN 을 아셔야 할듯 싶네요...

JOIN은 크게 JOIN과 LEFT  JOIN 그리고 RIGHT JOIN 이렇게 세가지가 있습니다..
얼른 검색에서 검색해서 찾아 보시기 바랍니다...

하지만 위의 문제는 좀 다른거 같네요..

일단 댓글부분을 view페이지가 브라우져에 표시된 다음에 ajax로 댓글을 나중에 불러 오는 방식으로 하신다면 무슨 문제가 생기냐 하면요.. 메인페이지에서 최신댓글 보여줄때 그걸 링크 할 경우 이렇게 하게 되죠..

http://도메인.com/board/view/10#3

이렇게 해야 10번글에 3번째 댓글을 향하게 되거든요...
하지만 댓글이 나중에 불러 오는 방식으로 하면 3번째 댓글을 못찾게 될거 같은데요...


제 생각에는 view의 콘트롤러에서

id값을 받아 오면 원래글의 정보를 불러오는 부분과
댓글을 불러 오는 부분을 두번 쿼리 하셔서 데이터를 준비해둔 다음에...

view에서 표현해 주는것이 좋을듯 싶습니다...
한대승(불의회상) / 2012/12/12 19:07:55 / 추천 0
그냥 select를 2번 하는 방법도 있습니다.