在连接的jquery结果中选择WHERE子句的相反行

时间:2012-04-03 13:18:58

标签: mysql

我有一个包含用户和游戏的数据库。 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 @ ...

由于

2 个答案:

答案 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

演示:http://www.sqlfiddle.com/#!2/7b0f6/2