Задать вопрос
@Preci

Система «уровней(экспинга)» для wordpress. Как лучше организовать хранение данных в mysql?

Здравствуйте!

Не знаю как более корректно сформулировать суть вопроса, попробую объяснить что я хочу сделать:

У меня есть 2 функции для перевода exp в уровень и уровень в exp:
//Кол-во опыта на уровень
function getExpLevel($level) {
return pow($level, 10/7) * 100;
}
//Уровень по опыту
function getLevelExp($exp) {
return pow($exp / 100, 7/10);
}


С их помощью, передавая в них опыт / уровень я узнал какой у пользователя уровень и сколько опыта надо на тот или иной уровень. Суть не в этом.

Я хочу выводить на странице ТОП пользователей по набранному опыту за неделю и с этим у меня есть проблема.

Как мне лучше организовать хранение данных в базе?

Например сделать 2 таблицы:

1. Таблица с user_id | total_exp (общий опыт каждого пользователя)
2. Таблица user_id | date | exp (сколько каждый пользователь набрал опыта за сутки)

Получится что из 1ой таблицы я буду брать данные для отображения в профиле пользователя и т.п., где будет показан его уровень (вычисляется по опыту)

Из 2ой таблицы я буду суммировать количество опыта каждого пользователя за последнюю неделю, группировать по user_id и выводить с сортировкой по набранному опыту. Но, мне надо будет выводить данные не за последние 7 дней, а начиная с предыдущего понедельника, т.е.:
*Если сегодня понедельник - значит я показываю ТОП по опыту за предыдущий пнд - вск.
*Если сегодня вторник, среда...воскресенье - я показываю ТОП за промежуток с текущего понедельника до текущего дня.
*В профиле пользователя я хочу показывать его текущее место в ТОПе

Вопрос:
Все с пометкой * я смогу вычислять для предложенной мной структуры таблиц? Может вы можете подсказать мне какое-то более рациональное решение?
  • Вопрос задан
  • 207 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Все можно (и разумно) реализовать встроенными средствами.
1. Храните данные в таблице wp_usermeta
2. Используйте WP_User_Query, а именно meta_query для получения данных по уровням/опыту + date_query для группировки и сортировки результатов по периодам.

ЗЫ: Это в случае, если ваши юзеры-игроки являются и аккаунтами (юзерами) WordPress. Если нет, например игрок это custom post type - тогда используйте WP_Query.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы