2015-01-02 20 views
0

所以我想要從我的SQL服務器獲取信息,我試圖抓住的是地圖名稱,地圖上的最佳時間以及完成時間的玩家。在正確的行上獲取正確的ID?

我當前的查詢是這樣的:

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與正確的時間不匹配。在時間表中,時間,地圖ID和玩家ID以及地圖表中的地圖ID和相應的地圖。我以某種方式設法將MapName和Time與我所做的查詢進行匹配(帶了我一堆小提琴)。

我該如何去匹配PlayerID呢?之後,我需要將playerID與玩家表中的用戶進行匹配。

正如我所說我是新來的SQL。

回答

1

假設您的查詢有效,您需要找到每個map的最短時間。

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 
+0

就像一個魅力,但我想用實際的玩家名稱,以取代PlayerID(在玩家稱爲用戶表)。這將如何實現?我猜測我做了類似於上面所做的事情,但我不知道從哪裏開始。編輯:我解決了,謝謝你的幫助:) – CBlank

+0

其實,還有一件事,每行在時間表中有一個'樣式'編號,我只喜歡有'style' = 1的時間。我不確定在查詢中在何處/如何輸入這樣的內容。 – CBlank

+0

@CBlank。 。 。嘗試向外部查詢添加「where」子句。 –

0

嘗試以下:您可以在此使用join

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