2013-02-05 237 views
0

我有這兩個表。我有當前玩家id_player,我想選擇這個玩家的所有遊戲(id_player)和他的對手信息。當前玩家和對手玩家使用相同的id_game進行連接。或MySQL選擇內部聯接和聯合

tables

table game:`id_game` (...) 
table game_player:`id_game_player, id_player, id_game`(...) 

「給我從當前玩家所有獨立的遊戲資訊和他的對手 並加入信息對他們的遊戲(通過遊戲分組)」

結果爲:

 +---player game info 
game1 | 
     +---opponent game info 

     +---player game info 
game2 | 
     +---opponent1 game info 

     +---player game info 
game2 | 
     +---opponent2 game info 

Can anyon e提供給我MySQL解決方案嗎?

感謝


編輯: 我嘗試用這個代碼,但我不知道這是最快的方法(其中),是有什麼辦法可以組結果像上面?

SELECT * FROM game_player 
    JOIN `game` ON game.id_game = game_player.id_game 
    WHERE game_player.id_game 
    IN (
    SELECT game_player.id_game 
    FROM `game_player` 
    WHERE game_player.id_player =2) 
+0

哪裏是遊戲信息? – veljasije

+0

「遊戲信息」表示表格中的所有其他字段* – Jovan

+0

問題措辭_「給我所有單獨的遊戲信息...」_使得這個分配問題的聲音強烈。你可以發佈你的努力到目前爲止? –

回答

3

試試這個

SET @player_ID = 0;     -- <<== the playerID 
SELECT a.*, b.*, 'player' Status   -- this is the first part of the union 
FROM game a       -- which gets all the game of 
     INNER JOIN game_player b   -- the selected player and its info 
      ON a.id_game = b.id_game 
WHERE id_player = @player_ID 
UNION ALL 
SELECT d.*, c.*, 'opponent' status 
FROM game_player c 
     INNER JOIN 
     (
      SELECT a.* 
      FROM game aa 
        INNER JOIN game_player bb 
         ON aa.id_game = bb.id_game 
      WHERE bb.id_player = @player_ID 
     ) d ON c.id_game = d.id_game AND c.id_player <> @player_ID 
ORDER BY id_game, status