Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql连接表_Php_Mysql_Database_Database Design - Fatal编程技术网

Php mysql连接表

Php mysql连接表,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我有四张桌子 表A包含用户-(用户id、用户名和名称) 表B中有令牌-(token\u id,user\u id)。每个用户有10个令牌条目。每个令牌仅分配给一个用户。一个用户有多个令牌(10) 表C为街机游戏-(街机id、令牌id、名称、级别、寿命)。只能为一个街机游戏分配一个令牌 表D为奖品-(奖品id、令牌id、名称、长度、宽度、高度)。只能将一个令牌分配给一个奖品 令牌分配给街机游戏或奖品,或不分配,但不能同时分配给两者 我的问题是如何设置一个MySQL连接查询,以确定给定用户的哪些令牌

我有四张桌子

  • 表A包含用户-(
    用户id、用户名和名称
  • 表B中有令牌-(
    token\u id,user\u id
    )。每个用户有10个令牌条目。每个令牌仅分配给一个用户。一个用户有多个令牌(10)
  • 表C为街机游戏-(
    街机id、令牌id、名称、级别、寿命
    )。只能为一个街机游戏分配一个令牌
  • 表D为奖品-(
    奖品id、令牌id、名称、长度、宽度、高度
    )。只能将一个令牌分配给一个奖品 令牌分配给街机游戏或奖品,或不分配,但不能同时分配给两者

    我的问题是如何设置一个MySQL连接查询,以确定给定用户的哪些令牌已分配给游戏或奖品,或者尚未分配。我的桌子布局是否最优?或者你对另一种布局有什么建议

    这是我的桌子:

    mysql> select * from users;
    
    +---------+--------+
    | user_id | name   |
    +---------+--------+
    |       1 | User 1 |
    |       2 | User 2 |
    |       3 | User 3 |
    |       4 | User 4 |
    +---------+--------+
    
    mysql> select * from tokens;
    
    +----------+---------+
    | token_id | user_id |
    +----------+---------+
    |        1 |       1 |
    |        2 |       1 |
    |        3 |       2 |
    |        4 |       2 |
    |        5 |       2 |
    |       11 |       2 |
    |        6 |       3 |
    |        7 |       3 |
    |       10 |       3 |
    |        8 |       4 |
    |        9 |       4 |
    +----------+---------+
    
    mysql> select * from prizes;
    
    +----------+----------+-----------+
    | prize_id | token_id | prizename |
    +----------+----------+-----------+
    |        1 |        4 | prize 1   |
    |        2 |        7 | prize 2   |
    |        3 |        8 | prize 3   |
    |        4 |        9 | prize 4   |
    +----------+----------+-----------+
    
    mysql> select * from arcade;
    
    +-----------+----------+----------+
    | arcade_id | token_id | gamename |
    +-----------+----------+----------+
    |         1 |        1 | game 1   |
    |         2 |        2 | game 2   |
    |         3 |        3 | game 3   |
    |         4 |        5 | game 4   |
    |         5 |       11 | game 6   |
    +-----------+----------+----------+
    
    我想要一个SQL查询,从中可以获得以下信息:

    对于用户1,他们有2个令牌-令牌id 1分配给游戏1,令牌id 2分配给游戏2

    或者对于用户2-他们有4个令牌-令牌id 3分配给游戏3,令牌id 4分配给奖品1,令牌id 5分配给游戏4

    或者对于用户3-他们有3个令牌-令牌id 6尚未分配,令牌id 7为奖品2,令牌id 10未分配

    等等

    我想构建一个像这样的MySQL查询字符串

    选择****
    从******
    其中user_id=1
    

    在这里,我指定用户id并获取上面的所有信息

    尝试此查询,但如果有一些数据,我可以检查,尽管我已使用虚拟数据进行了检查

    select
      t.token_id,
      IFNULL(g.game,'') as Game,
      IFNULL(p.name,'') as Prize,
      case when g.game != '' then 'Assigned' when p.name != '' then 'Assigned' else 'Not assigned yet' end as `Status`
    from token as t
      left join (select *
             from games
             where token_id not in(select
                         token_id
                       from prize)) as g
        on g.token_id = t.token_id
      left join (select *
             from prize
             where token_id not in(select
                         token_id
                       from games)) as p
        on p.token_id = t.token_id
    
    已编辑
    那么这应该是最简单的事情了

    select *
    from `user`
      left join token
        on user.user_id = token.user_id
      left join games
        on games.token_id = token.token_id
      left join prize
        on prize.token_id = token.token_id
    where user.user_id = 1
    

    你能提供一些关于这方面的样本数据吗