【问题标题】:Trouble With SQL QueriesSQL 查询的问题
【发布时间】:2015-11-17 14:37:36
【问题描述】:

我正在创建一个梦幻足球应用程序,我正在以以下格式将文本文件读入我的 MYSQL 数据库(我的数据库已全部填充):

FirstName LastName TeamName OpposingTeam Date (passing|rushing|fieldgoal) (FirstName LastName)?

尾随名称语法“(FirstName LastName)?”表示此信息可能在列中,也可能不在列中。它仅在传球达阵的情况下出现,代表传球的四分卫。

同样,语法“(passing|rushing|fieldgoal)”只是表示将出现这些特定值之一。

这是我的数据库的架构:

Player
    id: INT, primary key
    first: CHAR(25), first name of player
    last: CHAR(25), last name of player
    team: INT, foreign key to Team table

Team
    id: INT, primary key
    name: CHAR(25), single word name of team

Game
    id: INT, primary key
    tid1: INT, foreign key to Team table
    tid2: INT, foreign key to Team table
    date: YYYY-MM-DD

GameTeam
    id: INT, primary key
    GameID: INT, foreign key to Game table
    TeamID: INT, foreign key to Team table

Score
    id: INT, primary key
    game_id: INT, foreign key to Game table
    player_id: INT, foreign key to Player table
    passer_id: INT, foreign key to Player table
    score_type: enum['pass', 'rush', 'fg'], number of rushing touchdowns

在我的应用中,投篮得分为 3 分,传球/冲球达阵得分为 7 分。

我正在尝试提出可以帮助我获得以下信息的 SQL 查询:

佩顿·曼宁在对阵迈阿密的比赛中得分或传球有多少次达阵?

列出田纳西州获胜的所有比赛(日期和对手球队)。

雷吉·布什在 10 月份的冲球达阵次数是多少?

我在编写有助于我获取此信息的查询时遇到了很多麻烦。有人可以帮我吗?

为了澄清:一切都是 CHAR(25),除了 (passing|rushing|fieldgoal),它是一个枚举,以及格式为 YYYY-MM-DD 的日期。

编辑:这是一个包含我的一些数据的粘贴箱:http://pastebin.com/npKB5gQa

【问题讨论】:

  • 到目前为止你有什么,你在努力解决什么问题?
  • 到目前为止,您尝试过...?另外,如果您考虑到这些特定查询并且不知道如何设计它们,那么您到底为什么要设计这样的架构?
  • 我的数据库已经全部设置好(包括表格和填充的数据)。我只是想在我的表上运行查询以获取上述 3 个问题中的信息。
  • 我是数据库和 SQL 的新手。
  • 您确实需要阅读规范化,这种设计不适用于查询。

标签: mysql sql database subquery


【解决方案1】:

我建议您更改设计并创建一个单独的表格,其中包含球员数据(名字、姓氏等)、球队等。然后在您的 PlayerRecord 表中按 ID 引用球员/球队。

【讨论】:

  • 嘿,@carlosb。我刚刚标准化了我的数据库。现在可以看一下吗?
  • 你的桌子 GameTeam 不是必需的,因为在桌子上你已经有 game_id 加上两个球队的 id
  • 好的,那我就删了。我在我的应用程序中包含了一个包含一些数据的 pastebin。我如何列出田纳西州赢得的所有比赛(包括日期和对手球队)?
  • 使用您当前的结构,您可以执行以下操作:
  • 选择 t1.name 作为team1,t2.name 作为team2,g.id 作为game_id,g.date 作为game_date 从游戏g 离开外部加入团队t1 ON t1.id = g.tid1 离开外部加入团队 t2 ON t2.id = g.tid2 where t1.name = 'Tennessee' or t2.name = 'Tennessee'
猜你喜欢
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多