在右行获得正确的 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
所以我想从我的 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