2017-10-09 79 views
0

我有三個表:在其他表的mysql重複字段

遊戲:
game_id INT(11)否PRI AUTO_INCREMENT
archive_moves VARCHAR(3000)NO
聊天VARCHAR(3000)NO

玩家:
player_id INT(11)NO PRI AUTO_INCREMENT
用戶名VARCHAR(30)NO UNI
密碼VARCHAR(30)NO
電子郵件VARCHAR(30)NO UNI
激活位(1)NO B'0'
散列VARCHAR(32)NO
game_number INT(10)NO MUL 0

playersgames:
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外鍵 playersgames.player_id是player.player_id的外鍵

我想要的是game_number從玩家獲得與玩家遊戲完全相同的值。所以我在players.game_number和playersgames.game_number和「級聯更新」之間創建了一個外鍵。 問題是,當我改變players.game_number的值時,playersgames的值從players.game_number獲得最高值,player.player_id和他的player.game_number之間沒有更多的連接。

這背後的想法是隻有在遊戲編號<時才能獲得playersgames.player_id。5.換句話說,玩家不能有超過5場比賽。如果更方便,我願意接受其他解決方案。

謝謝!

回答

0

您不需要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

+0

謝謝,我完全忘記了計數方法。這裏是我的最終請求:「SELECT player_id FROM players WHERE player_id NOT IN(SELECT player_id FROM(SELECT player_id,COUNT(playergame_id)AS numGames,game_id FROM playersgames GROUP BY player_id)AS S1 WHERE game_id IN(SELECT game_id FROM playersgames WHERE player_id = 7)或numGames> 5)限制1;「。我用它來創造球員之間的配對。條件是:每名球員最多5場比賽,兩名球員只有一場比賽。 再次感謝! – bobHihi