Ответы пользователя по тегу MySQL
  • Нужен совет по реализации статистики?

    knetesin
    @knetesin
    Шпион
    вы можете инкриментить счетчики у юзера например в таблице user_game_stat(тригерами или в бизнес логике когда становится известен результат)
    структура например может быть такая (id, user_id, game_type, win_count, lost_count, total_games) - вы можете сюда добавить поле даты, чтобы у была инфа по стате юзера за какой то промежуток времени (например за сегодняшний день, или за вчерашний, или вообще периоды по 4 часа)

    1. движение в каком виде? изменение позиции по отношению к прошлому дню? вообще за каждый день относительно всех ?
    - в первом случае вам достаточно будет добавить поле с позицией за прошлый период и за текущий и агрегировать данные раз в N период
    - во втором немного сложнее логика, но можно в user_game_stat хранить доп поле с рейтингом на момент времени, в итоге вы запросто сможете понять позиции любых игроков на момент времени в игре (можно запросто получить топ за любой промежуток в рамках минимального периода) и из этих же данных можете строить реальный топ на данный момент (т.е своеобразный агрегат, можете и конкретно по каждой игре, но когда будет большой нагруз в итоге уйдете в агрегаты по промежуткам)
    * всё зависит от того что конкретно вам надо, возможно даже смесь обоих вариантов будет целесообразнее, зависит от задач

    2. user_game_stat - хранит статистику по игре за промежутки(либо глобальную, смотря каким путем пойти) - можно юзать её, но в целом в профиле можно выводить стастику по конкретной игре на основе таблицы games(у вас ведь есть связь с юзерами и результат игры), либо же вам надо счетчики? тогда у вас есть таблица с ними по каждой игре

    3. счетчики по игре?(проверять в момент изменения счетчика или раз во N времени?) можно агрегировать данные раз в час и смотреть, награды это вообще отдельная история :)

    p.s возможно даже mysql не лучшее решение для вас, но вообщем для адекватной оценки мало информации о задаче, о нагрузке, но надеюсь в целом идея из написаного выше ясна ;) :)
    Ответ написан
    Комментировать
  • Как увеличить поле id до максимального auto increment через update?

    knetesin
    @knetesin
    Шпион
    Думал про set id=id+1, но тогда наверно собьется весь auto increment таблицы и будут проблемы?
    можно и так, но проблемы могут начаться из за пробелов в id - зависит от вашей бизнес логики, в целом это вполне допустимо

    или что то в таком роде тоже должно сработать
    UPDATE `table` SET `id`=(SELECT id FROM (SELECT id FROM `table` ORDER by id desc LIMIT 1)+1) where `blabla`='blablabla'
    Ответ написан
    Комментировать
  • SQL: какая выборка работает быстрее -- с указанием * или именами всех полей таблицы?

    knetesin
    @knetesin
    Шпион
    Всё дело в передаче данных после обработки запроса,
    в случае с * - все поля попадут в выборку;
    если явно перечислить поля, тем самым ограничив поля которые вернуться с запроса - объем данных для передачи может быть меньше, следовательно обработка будет быстрее

    пересчеление всех нужных полей считается хорошей практикой + экономит объем переданных данных ;)
    Ответ написан
    Комментировать