在右行获得正确的 ID?

Getting the right ID's on the right row?

所以我想从我的 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。 做那个查询 returns 这个:

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 与正确的时间不匹配。在timestable中是时间、MapID和PlayerID,在maps中table是MapID和对应的地图。我以某种方式设法将 MapName 和时间与我所做的查询相匹配(花了我很多时间)。

我该如何匹配 PlayerID?之后,我需要将玩家 ID 与玩家 table 中的用户进行匹配。

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

假设您的查询有效,您需要找到每个 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

试试下面的方法:

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