1. 테이블이 2개 있습니다.
1)회원에 정보가 담긴 테이블 정보에는 회원아이디, 비밀번호, 이름, 관심분야1,2,3 이있습니다.
아이디, 비밀번호, 이름은 varchar형태로 되있고 관심분야에 경우 int형입니다.
2)관심분야만 담긴 테이블이 있습니다.
관심분야 아이디(테이블에 데이터 추가시 자동적으로 1씩증가하는 형태, int형)와 관심분야에 대한 명칭(varchar형)입니다.
관심분야 아이디가 기본키인 테이블입니다.
3)회원정보 테이블의 관심분야1,2,3에 경우 관심분야 테이블에서 관심분야 아이디를 외래키로 가져와 등록을 입력하는 형태입니다.
회원이 가입을 신청하고 정보를 입력할경우 아이디 : testID, 비밀번호 : pw, 이름 : 홍길동 이런식으로 입력되고
관심분야에 경우 체크박스 형태로 3가지를 선택하게 됩니다. 회원이 가입할때는 관심분야 명칭으로 보이게 되지만
실제 데이터는 관심분야 명칭에 해당하는 int형 숫자가 들어가게 됩니다.
ex)관심분야테이블에서 id : 1에 해당하는 명칭이 IT라면 가입할때는 IT로보이고 체크도 IT로 하지만 실제 회원테이블에는
데이터가 1이 들어가게 됩니다.
여기서 질문입니다.
2. 쿼리문을 이용해 회원아이디를 입력하면 그 회원에 대한 정보를 출력해야하는데 회원테이블에 존재하는 정보인
아이디, 이름은 바로 가져와 사용할 수 있지만, 관심분야1,2,3에 경우 회원정보 테이블에는 int형 정보로 되있기때문에 출력을 해주어도 int숫자만 보이게됩니다.
3. 이 int형 숫자들도 관심분야 테이블에서 id에 해당하는 관심분야 명칭으로 보이고 싶은데 관심분야가 하나인경우 조건문을 아이디에 해당하는 명칭 하나만 출력하는 형태로 적음으로 가능한데, 제가 하는 경우에는 3가지를 전부 보여주어야 하기때문에 조건문을 어떤식으로 작성해야 할 지 막힙니다.
4.어떤식으로 쿼리문을 작성하면 될까요?
Comment 8
-
항해자™
2014.01.18 19:58
-
ltearl
2014.01.18 21:46
조언 감사합니다.
허나 유감스럽게도 어플에서 사용하는게 아닌
윈도우폼에서 사용하는거라 디비내에 존재해야 합니다...
-
항해자™
2014.01.19 01:45
윈폼, 웹폼 모두를 고려하고 말씀드린거에요,,,
실제로 그렇게 서비스하고 있구요,,,
-
ltearl
2014.01.19 15:55
사용하는쪽에서 그 테이블 내용을 갖고잇는거밖에 해결법이 없는건가요?
쿼리문을 통해 처리는 힘들까요.
-
ltearl
2014.01.18 21:48
웹서비스 형태다 보니 이러한 형태가 필요합니다.
-
항해자™
2014.01.19 17:27
당연히 가능하나 좋을게 없다는거죠,,그러나 dbo.memb 테이블을 위와 같이 디자인한 상황에서 이렇게 처리하려는 이유를 모르겠네요ㅎㅎ만약 여러 사람의 데이터를 한꺼번에 출력하는 방법이라면,,, 관심분야 수 만큼 조인을 해야 합니다,,그래서 관심분야에 해당하는 부분을 웹서버에서 데이터로 가지고 있으면서 해당하는 번호를 문자열로 바꿔주는게 가장 성능이 좋습니다,,주고 받는 패킹 크기도 줄어들고 일부 부하를 웹서버로 나눠주니 전체적인 성능에 향상이 발생됩니다,,웹서버는 쉽게 많이 늘릴 수 있지만 일반적으로 디비는 어렵잖아요??ㅎㅎ그러나 1명 데이터만 불러오는 것이라면, output으로 하면 괜찮은 응답속도를 보장할 수 있겠네요,,@v : 로컬변수, @i : 입력변수, @o : 아웃풋 변수select@o_user_name = cUserName,@o_password = cPassWD,@v_favorit1 = cFavorit_01,@v_favorit2 = cFavorit_02,@v_favorit3 = cFavorit_03from dbo.memb with(nolock)where cUserId = @i_user_idselect@o_favorit1 = case cFavoritKey when @v_favorit1 when cFavorit else @o_favorit1 end,@o_favorit2 = case cFavoritKey when @v_favorit2 when cFavorit else @o_favorit2 end,@o_favorit3 = case cFavoritKey when @v_favorit3 when cFavorit else @o_favorit3 endfrom dbo.favorits with(nolock)where cFavoritKey in (@v_favorit1,@v_favorit2,@v_favorit3) -
항해자™
2014.01.19 17:34
여러사람 한번에 조회하는 경우,,,selecta.cUserId,a.cUserName,isnull(b.cFavorit,'') as cFavorit_01,isnull(c.cFavorit,'') as cFavorit_02,isnull(d.cFavorit,'') as cFavorit_03from dbo.memb as a with(nolock)left join dbo.favorits as b with(nolock) on b.cFavoritKey = a.cFavorit_01left join dbo.favorits as c with(nolock) on c.cFavoritKey = a.cFavorit_02left join dbo.favorits as d with(nolock) on d.cFavoritKey = a.cFavorit_03 -
ltearl
2014.01.23 19:32
확실히 가능은 한데 뭔가 안좋은거 같군요.
자세한 설명 감사합니다.
어플에서 관심분야 테이블의 값 모두를 데이터로 갖고 있으면 됩니다,,
화면에 뿌려줄 때 숫자와 맵핑된 문자열을 출력하면 좋겠네요,,
관심분야가 상시적으로 늘어나는 건 아니잖아요??
그런 입장에서 봤을 때 궂이 디비에서 갖고 있을 필요도 없습니다,,,