【问题标题】:Getting the right ID's on the right row?在正确的行上获得正确的 ID?
【发布时间】:2015-01-02 02:42:21
【问题描述】:

所以我想从我的 SQL 服务器获取信息,我想获取的是地图名称、地图上的最佳时间以及完成该时间的玩家。

我目前的查询是这样的:

SELECT maps.MapName, SEC_TO_TIME(TRUNCATE(Min(times.Time),3)) AS Time, times.PlayerID

FROM times

INNER JOIN maps ON times.MapID = maps.MapID

GROUP BY maps.MapID

我可能不需要那里的一些东西,但我不擅长 SQL。 执行该查询会返回:

MapName:       Time:            PlayerID:
map_name       00:00:09.440     42
map_name2      xx:xx:xx:xxx     15
map_name3      xx:xx:xx:xxx     65

等等。 MapNames 与正确的时间正确匹配。而 PlayerID 与正确的时间不匹配。在times表中,是Time、MapID和PlayerID,在maps表中是MapID和对应的地图。我以某种方式设法将 MapName 和 Time 与我所做的查询相匹配(花了我很多时间)。

我该如何匹配 PlayerID?之后,我需要将 playerID 与玩家表中的用户匹配。

正如我所说,我是 SQL 新手。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    假设您的查询有效,您需要找到每个map 的最短时间。您可以使用join

    SELECT m.MapName, SEC_TO_TIME(TRUNCATE(t.Time,3)) AS Time, t.PlayerID, u.name
    FROM times t INNER JOIN
         maps m
         ON t.MapID = m.MapID INNER JOIN
         (SELECT t.MapId, MIN(t.time) as time
          FROM times t
          GROUP BY t.MapId
         ) tmin
         ON tmin.MapId = t.MapId and tmin.time = t.time INNER JOIN
         Users u
         ON t.PlayerId = u.PlayerId
    

    【讨论】:

    • 就像一个魅力,但我想用实际的球员姓名(在球员表中称为用户)替换 PlayerID。这将如何实现?我猜我做了类似于上面所做的事情,但我不知道从哪里开始。编辑:我解决了,谢谢你的帮助:)
    • 实际上,还有一件事,时间表中的每一行都有一个style 数字,我只希望有一个style = 1 的时间。我不确定在哪里/如何在查询中输入这样的内容。
    • @CBlank 。 . .尝试在外部查询中添加 where 子句。
    • 我尝试在多个地方添加,但它只返回语法错误,我不确定在哪里添加它。
    • @CBlank 。 . .您应该就表格布局和您真正想要的结果提出另一个问题。
    【解决方案2】:

    试试下面的:

    SELECT     maps.MapName, SEC_TO_TIME(TRUNCATE(Min(times.Time),3)) AS Time, times.PlayerID
    FROM       times
    INNER JOIN maps ON times.MapID = maps.MapID
    WHERE      times.PlayerID = (SELECT PlayerID FROM times t WHERE t.Time = times.Time)
    GROUP BY   maps.MapID
    

    【讨论】:

      猜你喜欢
      • 2012-11-06
      • 2016-07-06
      • 1970-01-01
      • 2019-08-19
      • 2018-09-12
      • 2014-11-22
      • 1970-01-01
      • 2022-09-27
      • 2021-12-25
      相关资源
      最近更新 更多