본문으로 바로가기
728x90
반응형
SMALL

문제


현재난관에 봉착했다.
WRITER가 같은 조건에서
REGDATE 기준 최신값들을 5개만 출력되게
두 테이블을 병합해야한다.
두 개 사이의 공통 컬럼인 TITLE, CONTENT, WRITER, REGDATE, TYPE은 쉽게 UNION 을 써서 가져올수 있지만 GNO, BNO 컬럼값은 둘다 다르기에 어떻게 구현해야 할지 생각이 나지 않는다..

 

해결


본래는 위의 GNO 와 BNO 값을 가져와서 게시글 번호를 눌렀을때 해당 게시글로 가는 방법을 생각하고있었다.
그러나
두 테이블간의 중복되는 컬럼이 존재하기 때문에
테이블을 하나로 운영하기로 판단하였다.

 

본래는 게시판 생성 번호때문에 각 게시판마다 테이블을 생성해야줘야 한다고 생각했다.
허나 현재 상용되는 커뮤니티들을 봤을땐 하나로 운영되고 있었고 구지 게시판마다 테이블을 여러개 생성하였을시 자원의 낭비가 있을수 있겠구나 라고 생각할 수 있었다.
TYPE 컬럼으로 게시판의 종류를 나누게 판단하게 하였다.

기존 해결 이전의 mybatis sql

    	select rownum rn,b.*
	from(
		select *
		from
			(select 
				bno,type,regdate,writer,content,title
			from board
		union
			select
				gno,g_type,g_regdate,g_writer,g_content,g_title
			from g_board)a
			where writer='admin90' and rownum>0
			 order by regdate desc)b
				
		where rownum<6;

해결 후의 mybatis sql

      select
		 bno, title, content, regDate, type
	from
	 (
	 select /* +INDEX_DESC(board pk_board) */
	 		rownum rn, bno, title, content,  regDate, type
	 from 
	   	 board 
	 where writer = 'admin90' order by regdate desc
		)
		
	where rownum < 6

 

 

728x90
반응형
LIST