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 >= ?
我不知道是否有這樣做的更有效的方法?將查詢合併爲一個例子。