在正确的行上获得正确的ID?

时间:2015-01-02 02:42:22

标签: mysql sql

所以我想从我的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与正确的时间不匹配。在时间表中,Time,MapID和PlayerID以及maps表中的MapID和相应的映射。我以某种方式设法将MapName和Time与我所做的查询相匹配(带给我一堆摆弄)。

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试以下方法:

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