Как подсчитать активность пользователя за промежуток времени по данным из БД? Здравствуйте!
На моем сайте имеется система уровней для пользователей, который они могут повышать путем активности: публикация сообщений, тем, оценки и т.п.
Я хочу подсчитать самых активных пользователей за неделю - те, чей опыт максимально вырос за последние 7 дней.
1 раз в день для каждого пользователя заносятся данные о его опыте в таблицу user_exp которая имеет вид:
user_id | data | exp
...
1 | 03-03-2016| 1238
1 | 02-03-2016| 1218
2 | 03-03-2016| 552
2 | 02-03-2016| 523
...
т.е. в таблице есть информация о опыте пользователя за каждый деньВопрос: как мне посчитать у какого пользователя на сколько прирос опыт за промежуток времени (неделя) и получить ID пользователей с максимальным приростом?
Почему я записываю данные о опыте за каждый день, а не 2 раза в неделю (в начале и в конце, что бы сравнить)? Потому что я хочу что бы пользователь мог зайти на страницу и посмотреть текущий ТОП: кто сколько набрал за последние сутки, за 2ое суток, и т.п.
p.s. так же я выслушал бы предложения относительно структуры таблицы, может быть я делаю что-то не так и можно проще...

21 Авг 2019 в 06:10
190 +1
0
Ответы
1

Для того чтобы подсчитать у какого пользователя на сколько прирос опыта за промежуток времени (неделю) и получить ID пользователей с максимальным приростом, можно воспользоватся SQL запросом.
Например, запрос может выглядеть следующим образом:

SELECT user_id, SUM(exp) as exp_growth
FROM user_exp
WHERE data BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()
GROUP BY user_id
ORDER BY exp_growth DESC;

Этот запрос выбирает ID пользователей и суммирует опыт за последнюю неделю для каждого пользователя, сортируя результат по приросту опыта по убыванию.
Таким образом, вы получите список пользователей с максимальным приростом опыта за последнюю неделю.

Относительно структуры таблицы, в целом ваш подход к записи опыта пользователя за каждый день в таблицу user_exp вполне разумен, поскольку у вас есть возможность предоставить пользователю информацию о его активности на сайте за различные промежутки времени. Однако, возможно имеет смысл добавить индекс для поля user_id, чтобы ускорить выполнение запросов, особенно если таблица будет содержать большое количество данных.

20 Апр в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 172 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир