Делаешь базу данных с, к примеру, таблицей Users, где будут поля id и messages_count, last_day, в messages_count после каждого сообщения пользователя делаешь +1, в конце дня по cron (как вариант) запускается скрипт, который перекидывает значение из messages_count в last_day, а messages_count обнуляет. В основном скрипте вытягиваешь нужное кол-во пользователей с параметром сортировки по last_day. По аналогии можешь делать для каждой недели/месяца/так далее.