2012-06-04 46 views
0

我有4个表格,如下所示;如何执行此操作?

tbl_UserInfo  DUMMY VALUES  DATATYPE  
UserID     1    Integer (PRIMARY KEY) 
UserName    A    Text   
FacebookID   10021556   Text   
EmailID    [email protected]  Text   
Facebook_EmailID [email protected]  Text   
Password   welcome123   Text   
Chips     100    Integer  
DeviceType    iphone   Text  



tbl_Game   DUMMY VALUES  DATA TYPE 
GameID     1    Integer  
Type     H or M   Text   
Complete    No    Text  



tbl_GamePlayer  DUMMY VALUES  DATA TYPE 
ID      1   Integer (PRIMARY KEY) 
GameID     1   Integer (FOREIGN KEY FOR GameID in tbl_Game) 
userid     1   Integer (FOREIGN KEY FOR UserID in tbl_UserInfo)  



tbl_Streaks   DUMMY VALUES  DATA TYPE 
ID      1   Integer 
GameID     1   Integer (FOREIGN KEY FOR GameID in tbl_Game) 
Player1    1   Integer (FOREIGN KEY FOR UserID in tbl_UserInfo) 
Player2    2   Integer (FOREIGN KEY FOR UserID in tbl_UserInfo) 
Streaks    2   Integer 

我想reslut作为

{ 
Player1 = "A" 
Player2 = 'B" 
Streaks = 10 (between Player1 and Player2) 
Chips = 100 (for player1) 
Chips = 200 (for player2) 
Fbid= 124578 (for player1) 
Fbid = 784512 (for player2) 
} 

{ 
Player1 = "A" 
Player3 = 'C" 
Streaks = 15 (between Player1 and Player3) 
Chips = 100 (for player1) 
Chips = 450 (for player3) 
Fbid= 5654578 (for player1) 
Fbid = 7845512 (for player3) 
} 

{ 
Player1 = "A" 
Player4 = 'D" 
Streaks = 5(between Player1 and Player4) 
Chips = 100 (for player1) 
Chips = 208 (for player4) 
Fbid= 12898978 (for player1) 
Fbid = 78488512 (for player4) 
} 

我想和完整=“没有”

显示在用户登录(与他的其他球员的fbids,用户名,芯片,条纹)的所有现有游戏

注 - userid作为参数传递和所有的球员都通过自己的用户ID连接

+0

列{Player1,Player2,Player3,Player4,Player5}看起来像是一个重复组。也许你应该首先规范你的数据模型。 – wildplasser

+0

你有没有看过,并理解,'JOIN'的美妙世界?如果不是,你是不是'看着'或'明白'?在后一种情况下,请发布您迄今为止创建的SQL查询。 – jos

回答

1
SELECT Player1.UserName AS Player1_UserName, 
     Player2.UserName AS Player2_UserName, 
     tbl_Streaks.Streaks AS Streaks, 
     Player1.Chips  AS Player1_Chips, 
     Player2.Chips  AS Player2_Chips, 
     Player1.FacebookID AS Player1_FacebookID, 
     Player2.FacebookID AS Player2_FacebookID 
FROM tbl_Game 
    JOIN tbl_GamePlayer AS gPlayer1 ON gPlayer1.GameID = tbl_Game.GameID 
    JOIN tbl_GamePlayer AS gPlayer2 ON gPlayer2.GameID = tbl_Game.GameID 
           AND gPlayer1.UserID != gPlayer2.UserID 
    JOIN tbl_UserInfo AS Player1 ON gPlayer1.UserID = Player1.UserID 
    JOIN tbl_UserInfo AS Player2 ON gPlayer2.UserID = Player2.UserID 
    LEFT JOIN tbl_Streaks ON tbl_Streaks.GameID = tbl_Game.GameID 
         AND (tbl_Streaks.Player1, tbl_Streaks.Player2) IN (
          (Player1.UserID, Player2.UserID), 
          (Player2.UserID, Player1.UserID) 
          ) 
WHERE Player1.UserID = 1 AND tbl_Game.Complete = 'No' 

sqlfiddle上查看。

+0

@RKP:如果不是来自'tbl_Streaks.Streaks'的相应条目,结果集中的Streaks值应该是多少? – eggyal

+0

@RKP:如果不是'tbl_Streaks.Streaks',记录在哪里? – eggyal

+0

@RKP:因此,如果玩家A和玩家B在'tbl_Streaks'中没有记录,但是有一个游戏中这些玩家都玩过了,您需要在结果集中记录具有'Streaks'的玩家NULL的值? – eggyal