Мне просто интересно, есть ли более эффективный способ сделать это.Присоединяйтесь к этим двум запросам в один
У меня есть таблица, в которой я отслеживаю оценки пользователей для разных флеш-игр. Таблица 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 >= ?
Я интересно, если есть более эффективный способ сделать это? Объединение запросов в один, например.