Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Балловая система действий пользователя |
Автор: ruX 9.10.2009, 18:25 |
Всем доброго времени суток. Мне нужно вести счёт(баллов/поинтов) пользователя. Этот счёт несколько похож на карму - за исключением, что списываются и добавляются баллы системой за различные действия(просмотр, коммент, заход на сайт). Практически, как это сделанно в http://otvety.google.ru. Там:
думаю идея ясна. Я думаю завести таблицу(user_id, action_id, points, timestamp) в которую записывать изменение счёта в размере points для юзера user_id, которое произошло в timestamp и причина изменения баллов - action_id. В свою очередь создать таблицу(action_id, describe) в которой номер действия action_id связан с его описанием describe. Также хранить в таблице пользователя текущий счёт, ну это понятно, не пересчитывать же. Предполагается очень много действий пользователя(практически любое открытие страницы вызывает изменение баллов). Узнать текущий счёт будет не проблемма - он лежит в отдельной таблице. А просмотр действий? Идеально - это join'ить 2 таблицы по полю action_id и получается лог действий. Ещё, стоимость одного из действий может меняться. Т.е. (например) сохранил, что человек просмотрел 2 фото, спустя день он вернулся к альбому и продолжил просматривать его, за что ещё баллы начисляются(а вернее надо добавить к тому что записал в бд!) Оптимально? Или стоит ежедневно/недельно/месячно "консервировать" текущую таблицу действий? Или причину изменения баллов вынести в файл например? Может какие-нибудь глобальные изменения в идее есть? |
Автор: ruX 13.10.2009, 19:24 | ||
Да, пропустил. Количество начисляемых баллов может меняться в зависимости от пожелания модераторов, а поскольку нужно хранить весь лог - это создаст проблемму. Тем более как я написал выше можно сделать несколько однотипных действий(просмотр одного альбома) - за это начислиться баллов - количество просмотров * стоимость просмотра.
Думаю да, а не стоит? Пусть юзер просматривает всего лишь 1 альбом - 500фото. тогда нужно записывать 500 строк в таблицу! |
Автор: Hellka 13.10.2009, 19:34 | ||
а зачем такой геморрой? не думаешь, что юзеры накручивать будут? делай всё четко и сурово. зашел в альбом +1, зашел еще раз - фиг, т.к. уже смотрел его. по своему опыту знаю, что изголяться начнут |
Автор: ruX 14.10.2009, 11:46 | ||
Это ТЗ а не геморрой ) Об этом я также не должен думать
Да, просмотренные фото при повторном просмотре конечно не будут "тарифицироваться". А вообще здесь "фото" и "альбомы" это абстрактно - по факту может быть много чего. |
Автор: youri 14.10.2009, 22:57 |
а где будут храниться текущие points? |
Автор: Hellka 15.10.2009, 07:36 | ||
profit? |
Автор: youri 15.10.2009, 08:12 |
я про points, которые модераторы назначают и которые меняются |
Автор: Hellka 15.10.2009, 09:46 | ||
да это можно и в файле конфига, и в таблице и в массиве хранить |
Автор: ruX 15.10.2009, 11:16 | ||
Один из вопросов моих, где лучше хранить, я же подумал что хорошо бы:
Вторая мысль была как раз такая же - хранить в сериализированном массиве, где есть соответствия (ид_действия->поинты,описание) Сейчас подумал ещё над тем, что возможно лучше не менять количество баллов за действие, а создавать копию действия, соответственно с другим айди, таким же описанием и другим кол-вом количеством баллов. |
Автор: youri 15.10.2009, 14:29 | ||||
это нужно, если у тебя будут запросы типа "а какие баллы назначались пользователям, когда действие ... было в ... баллов" ;)
храни в actions надо будет только рассказать модератором, в каком каталоге файлик этот лежит... |
Автор: ruX 16.10.2009, 17:37 | ||
youri, Hellka, спасибо за ответы решил как и посоветовали хранить actions в бд и
тема закрыта ) |
Автор: youri 16.10.2009, 18:00 |
на всякий случай, повторюсь: текущие points лучше хранить в actions и не создавать новую запись при изменении points. Тебе вряд ли эта дополнительная информация понадобиться. Создавать новую запись имеет смысл, если нужно будет выдавать историю изменения points для action'а или выдавать историю назначения пользователям points для некотрого action'а, когда у него было некоторое значение points |