我有一个包含用户和游戏的数据库。 1个游戏可以有多个用户,所以我创建了一个名为users_games的链接表。关键是游戏总是只有2个玩家,因为它是一个棋盘游戏。我知道我是哪个玩家,我有我的user_id和我的电子邮件,但是我希望得到一个结果,它给出了我所有游戏的列表,其中包括user_id和另一个人的电子邮件。所以这个查询会查看我所在的所有游戏,然后使用播放器的名称给出另一行。
我的桌子:
游戏
id (int)
board (varchar) representation of the board
用户
id (int)
email (varchar)
password (varchar MD5)
users_games
id (int)
user_id (int)
game_id (int)
澄清此查询
SELECT *
FROM `tic_users_games` AS ug
LEFT JOIN tic_users AS u
ON ug.user_id = u.id
RIGHT JOIN tic_games AS g
ON ug.game_id = g.id
结果
id user_id game_id id email password id board created updated
1 1 1 1 ME@gmail.com d56b699830e77ba53855679cb1d252da 1 0|0|0|0|0|0|0|0|0 2012-04-02 16:56:06 2012-04-02 16:56:06
2 2 1 2 FOE1@gmail.com d56b699830e77ba53855679cb1d252da 1 0|0|0|0|0|0|0|0|0 2012-04-02 16:56:06 2012-04-02 16:56:06
3 3 2 2 FOE2@gmail.com d56b699830e77ba53855679cb1d252da 2 0|0|0|0|0|0|0|0|0 2012-04-02 16:56:06 2012-04-02 16:56:06
4 1 2 1 ME@gmail.com d56b699830e77ba53855679cb1d252da 2 0|0|0|0|0|0|0|0|0 2012-04-02 16:56:06 2012-04-02 16:56:06
请参阅:在上面的例子中我只想要2行:game_id 1和2,其中FOE1 @ ...和FOE2 @ ...
由于
答案 0 :(得分:2)
这应该为你做。语法对于mysql可能不太准确,但你应该到达那里。基本上让所有在user_games表中拥有游戏的用户都拥有与我所在游戏相同的game_ID:
SELECT
User_Games.Game_ID,
Users.ID,
Users.Email
FROM
Users
LEFT JOIN User_Games ON Users.ID = User_Games.User_Id
WHERE
Users.User_ID <> @yourUserID
AND EXISTS
(SELECT
NULL
FROM
User_Games AS MyUserGames
WHERE
User_Games.Game_ID = MyUserGames.Game_ID
AND MyUserGames.User_ID = @yourUserID)
答案 1 :(得分:2)
试试这个(@userid
表示您正在搜索游戏的用户,在本例中为1):
select *
from tic_users_games ug1
left join tic_users_games ug2 on ug1.game_id = ug2.game_id
left join tic_users u on ug2.user_id = u.id
right join tic_games g on ug2.game_id = g.id
where ug1.user_id = @userid
and ug2.user_id <> @userid