Как подсчитать активность пользователя за промежуток времени по данным из БД? Здравствуйте! На моем сайте имеется система уровней для пользователей, который они могут повышать путем активности: публикация сообщений, тем, оценки и т.п. Я хочу подсчитать самых активных пользователей за неделю - те, чей опыт максимально вырос за последние 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. так же я выслушал бы предложения относительно структуры таблицы, может быть я делаю что-то не так и можно проще...
Для того чтобы подсчитать у какого пользователя на сколько прирос опыта за промежуток времени (неделю) и получить 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, чтобы ускорить выполнение запросов, особенно если таблица будет содержать большое количество данных.
Для того чтобы подсчитать у какого пользователя на сколько прирос опыта за промежуток времени (неделю) и получить 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, чтобы ускорить выполнение запросов, особенно если таблица будет содержать большое количество данных.