所以我想从我的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新手。
答案 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