Как подсчитать активность пользователя за промежуток времени по данным из БД? Здравствуйте!
На моем сайте имеется система уровней для пользователей, который они могут повышать путем активности: публикация сообщений, тем, оценки и т.п.
Я хочу подсчитать самых активных пользователей за неделю - те, чей опыт максимально вырос за последние 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
209 +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 Апр 2024 в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир