0

私はこの2つのテーブルを持っています。現在のプレーヤーid_playerがあります。このプレーヤー(id_player)とその対戦相手の情報からすべてのゲームを選択したいと思います。現在のプレイヤーと対戦相手のプレイヤーは同じid_gameに接続されています。また

テーブル

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

誰かが私にMySQLソリューションを提供できますか?

ありがとう


編集:私はこのコードを試してみましたが、これが最速の方法(WHERE IN)であるかどうかわかりません。また、上記のような結果をグループ化する方法はありますか?

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)
4

1 に答える 1

2

これを試してみてください

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
于 2013-02-05T14:50:56.817 に答える