【问题标题】:Have duplicate field in other table mysql其他表mysql中有重复字段
【发布时间】:2017-10-09 17:08:17
【问题描述】:

我有三张桌子:

游戏:
game_id int(11) NO PRI auto_increment
archive_moves varchar(3000) 否
聊天 varchar(3000) 否

玩家:
player_id int(11) NO PRI auto_increment
用户名 varchar(30) NO UNI
密码 varchar(30) 否
电子邮件 varchar(30) 没有 UNI
激活位 (1) 否 b'0'
hash varchar(32) 否
game_number int(10) NO MUL 0

玩家游戏:
playergame_id int(11) NO PRI auto_increment
player_id int(11) NO MUL
game_id int(11) NO MUL
game_number int(10) NO MUL 0

playersgames.game_id 是 games.game_id 的外键
playergames.player_id 是 player.player_id 的外键

我想要的是 game_number 从玩家到玩家游戏获得完全相同的值。所以我在 player.game_number 和 playergames.game_number 之间创建了一个外键,并“更新时级联”。 问题是当我从players.game_number更改值时,playersgames的值从players.game_number获得最高值,并且players.player_id和他的player.game_number之间没有更多的联系。

这背后的想法是仅当 game_number

谢谢!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您不需要playergames 表或players 表中的game_number 列。相反,您可以运行以下查询:

    SELECT
        p.player_id,
        COUNT(g.playergame_id) AS numGames
    FROM
        players p
    LEFT JOIN
        playersgames g ON p.player_id = g.player_id
    GROUP BY
        p.player_id
    

    结果将为您提供玩家 ID 和玩家拥有的游戏数量。另见:MySQL joins and COUNT(*) from another table

    【讨论】:

    • 谢谢,我完全忘记了计数方法。这是我的最后一个请求:“SELECT player_id FROM player WHERE player_id NOT IN (SELECT player_id FROM (SELECT player_id, COUNT(playergame_id) AS numGames, game_id FROM playergames GROUP BY player_id) AS S1 WHERE game_id IN(SELECT game_id FROM player_id= 7) 或 numGames > 5) 限制 1;"。我用它来创建玩家之间的配对。条件是:每名球员最多 5 场比赛,两名球员只能进行一场比赛。再次非常感谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2019-01-16
    相关资源
    最近更新 更多