我只是想知道是否有更有效的方法来做到这一点。
我有一张桌子,可以跟踪不同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 >= ?
我想知道是否有更有效的方法吗?例如,将查询组合成一个。