加入这两个查询到一个
问题描述:
我只是想知道是否有一个更有效的方式来做到这一点。加入这两个查询到一个
我有一张桌子,可以跟踪不同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 >= ?
我不知道是否有这样做的更有效的方法?将查询合并为一个例子。