2011-01-17 2 views
1

Мне нужно отобразить диаграмму, где можно показать игру, оценку, зачетный ранг, еженедельный ранг, ранг с друзьями.Расчет ранга игрока на основе проведенных игр

У меня есть две таблицы:
1) high_scores (playerid, GameID, оценка, время (временной метки))
2) Друзья (playerid, friendid)

мне было интересно, как я могу сделать это с помощью минимальное количество запросов.

Я использую PHP & MySQL для моего игрового сайта.

+2

Достаточно немного разъяснений: вы имеете в виду, что после каждой игры отображать счет в игре, а также где он сидит во все время и неделю? Определите неделю, это последние 7 календарных дней, последние 24x7 часов, текущая неделя, начинающаяся в понедельник и т. Д.? Ранг с друзьями - это тоже ломается по неделям? Показывает ли он уникальных друзей только на основе наилучшего результата для каждого друга? – RichardTheKiwi

ответ

0

Рассчитывайте свои данные один раз, а не по каждому запросу.

У вас есть 2 решения:

  • хроны/асинхронная работа
  • спусковые перевычисления статистики после каждой вставка/обновление/удаление/усечение
1

удавались сделать запрос для него, как следовать :

SELECT 
    gamescores.gameid, 
    COUNT(*)+1 AS rank, 
    playergamescores.total, 
    gamename, 
    foldername 
FROM (
    SELECT gameid, playerid, SUM(score) AS total, time 
    FROM high_scores 
    GROUP BY gameid, playerid 
    ORDER BY gameid, total DESC 
) AS gamescores 
INNER JOIN 
(
    SELECT gameid, SUM(score) AS total 
    FROM high_scores 
    WHERE playerid = 361822 
    GROUP BY gameid 
    ORDER BY total DESC 
) AS playergamescores 
ON playergamescores.gameid = gamescores.gameid 
INNER JOIN gamemaster 
ON gamescores.gameid = gamemaster.gameid 
WHERE gamescores.total > (
    SELECT SUM(score) AS total 
    FROM high_scores 
    WHERE gamescores.gameid = gameid 
    AND playerid = 361822      
) 
GROUP BY gamescores.gameid 
ORDER BY gamescores.time DESC 

Спасибо за ответ в любом случае ... -Navi

Смежные вопросы