2010-05-27 79 views
4

我只是想知道是否有一個更有效的方式來做到這一點。加入這兩個查詢到一個

我有一張桌子,可以跟蹤不同Flash遊戲的用戶分數。該表games_scores的定義是這樣的:

alt text http://img13.imageshack.us/img13/7262/structure1.png

每個用戶可以擁有多個條目此表中的任何遊戲。當我顯示評分板時,我只選擇每個用戶的MAX分數。沒有真正的幻想。

我正在做的事情是如果他沒有出現在記分板上(板上只顯示前20名球員),則顯示被綁定用戶的位置。我用兩個查詢完成了這個。第一個告訴我的用戶的位置:

SELECT 
COUNT(*) + 1 
FROM (
SELECT 
    MAX(score) 
FROM 
    games_scores gs 
WHERE 
    gs.games_id = ? 
    AND gs.score > (
    SELECT 
    MAX(gs2.score) 
    FROM 
    games_scores gs2 
    WHERE 
    gs2.games_id = ? 
    AND gs2.users_id = ? 
    AND gs2.add_time = ? 
) 
    AND gs.add_time = ? 
GROUP BY 
    gs.users_id 
) AS tmp_table 

而第二個給了我他的得分:

SELECT 
MAX(gs.score) 
FROM 
games_scores gs 
WHERE 
gs.games_id = ? 
AND gs.users_id = ? 
gs.add_time >= ? 

我不知道是否有這樣做的更有效的方法?將查詢合併爲一個例子。

回答