2012-06-04 3 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 передается в качестве параметра, и все игроки связаны их идентификатору пользователя

+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: Каким должно быть значение «Streaks» в наборе результатов, если не соответствующая запись из 'tbl_Streaks.Streaks'? – eggyal

+0

@RKP: А где это записано, если не в 'tbl_Streaks.Streaks'? – eggyal

+0

@RKP: Итак, если нет записи в 'tbl_Streaks' для игрока A против игрока B, но есть игра, в которой эти игроки играли, вам нужна запись в наборе результатов для тех игроков, у которых есть« Streaks » значение 'NULL'? – eggyal