使用第二个表中的键将多个行合并为单独的列

时间:2012-07-29 20:33:44

标签: mysql

我有两张桌子。

用户:

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,每个玩家ID两个,每个名称两个。

我想到的一个解决方案是:

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个。如果我必须这样做,我想知道在客户端请求名称作为第二个查询是否是更好的选择?然后,客户端可以创建唯一ID的列表,并对所有这些进行一次查询。我不太担心延迟,因为客户端和服务器位于同一个数据中心。

感谢您的帮助。

1 个答案:

答案 0 :(得分: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

应该做的伎俩