0

私は2つのテーブルを持っています。

ユーザー:

int player_id
varchar player_name

ゲーム:

int game_id
int player_id1
int player_id2

プレイヤー ID をパラメーターとして受け取り、各ゲームの情報とプレイヤーの名前を返すクエリを作成したいと考えています。これまでのところ、私が持っているものは次のとおりです。

SELECT 
    game_id, 
    player_id1, 
    player_id2, 
from GAMES, GAME_STATES 
where player_id1=@playerid or player_id2=@playerid

私が立ち往生している部分は、プレイヤーIDとともにプレイヤーの名前を返す簡単な方法です。返されるクエリには 5 つの列があり、ゲーム ID が 1 つ、プレイヤー ID ごとに 2 つ、名前ごとに 2 つです。

私が考えた1つの解決策は次のとおりです。

SELECT 
  game_id, 
  player_id1, 
  (select player_name from USERS where player_id=player_id1) as player_name1, player_id2, 
  (select player_name from USERS where player_id=player_id2) as player_name2, 
from GAMES, GAME_STATES 
where player_id1=@playerid or player_id2=@playerid

ただし、返される行ごとにさらに 2 つのクエリがあるため、これはデータベースで多くの余分な作業のように見えます。そうしなければならない場合、クライアント側で 2 番目のクエリとして名前を要求する方がよい選択肢ではないかと考えています。次に、クライアントは一意の ID のリストを作成し、それらすべてに対して 1 つのクエリを実行できます。クライアントとサーバーが同じデータ センターにあるため、遅延についてはあまり心配していません。

ご協力ありがとうございました。

4

1 に答える 1

0

SELECT game_id, u1.player_name, u2.player_name FROM games AS game INNER JOIN users AS u1 ON y1.playerid = game.player_id1 INNER JOIN users AS u2 ON u2.playedid = game.player_id2 WHERE player_id1 = @playerid OR player_id2 = @playerid

トリックを行う必要があります

于 2013-03-30T13:29:04.710 に答える