2012-06-02 3 views
0

이 세 가지 쿼리를 결합하는 방법은 무엇입니까?3 가지 선택 쿼리를 결합하는 방법?

select gameid, type, Player1, Player2, Player3, Player4, Player5 
from tbl_game 
where Player1=" + userid + " OR Player2=" + userid + " OR Player3=" + userid + 
     " OR Player4=" + userid + " OR Player5=" + userid + " AND Complete = 'No' 

select Player1, Player2, Streaks 
from tbl_streaks 
where gameid = [gameid from first query] 

select userid, userid, Facebookid, points 
from tbl_userinfo 
where userid = [players from first query] 

userid이 매개 변수로 전달됩니다.

나는 어떤 생각이든 ..

도와주세요.

+3

음, 테이블 구조를 설명하십시오! 어떤 테이블이 관련되어 있습니까? 연결 방법은? 어떤 FK 관계가 있습니까? 예 : 'tbl_userinfo'와'tbl_game'은 어떻게 관련이 있습니까 ?? 그것은 그들에게 어떻게 합류하는지 보여줄 것입니다 ... –

+0

당신에게 테이블 구조를 게시하십시오. 질문에 답하기 위해 적절한 결합을하기 위해 테이블과 그 관계를 볼 필요가 있습니다. – Namphibian

+1

'tbl_game' 테이블에 5 개의 고정 컬럼을 갖는 디자인은 정말로 나쁜 디자인입니다. 모든 플레이어를 얻으려면 적어도 5 번 이상'tbl_userinfo' 테이블에 참여해야합니다! 많은 수의 플레이어를 게임에 참여시키기 위해 "링크"테이블을 사용하여 게임과 사용자간에 다 대다 관계를 만드는 방법을 실제로 살펴야합니다. .... –

답변

0
select gameid , type ,Player1,Player2,Player3,Player4,Player5 from tbl_game 
Natural Join 
(select Player1, Player2, Streaks from tbl_streaks) as t4 on t4.gameid=tbl_game.gameid 
Natural Join 
(select userid, userid,Facebookid,points from tbl_userinfo) as t5 on t5.userid="+userid+" 
where Player1=" + userid + " OR Player2=" + userid + " OR Player3=" + userid + " OR Player4=" + userid + " OR Player5=" + userid + " AND Complete = 'No' 
1

이것은 당신이 원하는 일을해야합니다

select g.gameid, g.type, g.Player1, g.Player2, g.Player3, g.Player4, g.Player5, s.Player1, s.Player2, s.Streaks, u.userid, u.Facebookid, u.points 
FROM tbl_game g 
JOIN (select Player1, Player2, Streaks from tbl_streaks) s ON s.gameid = g.gameid 
JOIN (select userid, userid, Facebookid, points from tbl_userinfo) u ON u.userid = (g.Player1 OR g.Player2 OR g.Player3 OR g.Player4 OR g.Player5) 
where Player1=" + userid + " OR Player2=" + userid + " OR Player3=" + userid + 
     " OR Player4=" + userid + " OR Player5=" + userid + " AND Complete = 'No' 

를가 n 개의 플레이어와 열을 많이 갖는 나쁜 디자인, 그들은 전용 테이블의 행 수 있어야이다 그러나 ...

1
select tg.gameid, tg.type, tg.Player1, tg.Player2, tg.Player3, tg.Player4 
    , tg.Player5, ts.Streaks, tu.userid, tu.Facebookid, tu.points 
    from tbl_game tg 
inner join tbl_streaks ts 
    on ts.gameid = tg.gameid 
inner join tbl_userinfo tu 
    on (tg.Player1 = tu.userid 
      or tg.Player2 = tu.userid 
      or tg.Player3 = tu.userid 
      or tg.Player4 = tu.userid 
      or tg.Player5 = tu.userid 
      ) 
where tu.userid = " + userid + " 
    and tg.Complete = 'No'; 

이것은 테이블 구조와 동일하지만 향상된 성능으로 더 최적화 된 쿼리를 만들 수 있도록 스키마 작업을 제안합니다. tbl_game에서 열 플레이어를 제거하고 tbl_userinfo에 대한 userid를 참조하여 플레이어를위한 별도의 찾아보기 테이블을 만듭니다.

관련 문제