Добрый день, коллеги.
Хотел бы задать вопрос, о том, как лучше реализовать логику присвоения нового звания на форуме по достижению опред кол-ва сообщений пользователем.
Имеем таблицу с рангами и кол-вом сообщений необходимых для получения оных.
0 - 0
1 - 10
2 - 15
3 - 30
...
В таблице пользователей, имеем столбец rang и count_message
Как логично при такой структуре осуществить проверку и присвоение ранга, если допустим у пользователя user уже есть 9 сообщений и он пишет 10ое, что бы ранг сменился на "1".
мысли разные и не очень оптимальные на ум приходят, и возможно не хорошо хранить инфу о текущих сообщениях и текущем ранге в таблице пользователя и лучше вынести в отдельную таблицу, но все же... помогите советом, попробую набросать у себя...
1. Enj0y - 07 Октября, 2019 - 14:11:26 - перейти к сообщению
2. LIME - 07 Октября, 2019 - 15:31:30 - перейти к сообщению
А зачем вообще ранг? Тут достаточно количество хранить, а таблицу соответствия я бы в код перенес. Она же не меняется динамически в какой-нибудь админке?
Ранг отображать в зависимости от количества на лету.
(Добавление)
То есть вычислять при загрузке данных из бд.
Ранг отображать в зависимости от количества на лету.
(Добавление)
То есть вычислять при загрузке данных из бд.
3. Enj0y - 07 Октября, 2019 - 15:33:46 - перейти к сообщению
Это мне кажется не удобным, потому как я могу завтра поменять что 1 получается при 12 сообщений, но мне надо что бы у того кто 10 набрал уже был 1й, т.к. он уже получил его.
Давайте соотнесем это с получением опыта, как будто это игра.
Получил 10 опыта - 1 уровень и тд.
Поможете?
Давайте соотнесем это с получением опыта, как будто это игра.
Получил 10 опыта - 1 уровень и тд.
Поможете?
4. LIME - 07 Октября, 2019 - 15:40:45 - перейти к сообщению
Ну это конечно меняет дело. Советую рассмотреть паттерн Observer и повесить событие на обработку полученного сообщения. Хранить наверное лучше в той же таблице потому как все равно понадобится при загрузке юзера из бд по любому. Зачем лишние запросы, джойны.
(Добавление)
(Добавление)
https://refactoring[dot]guru/ru/desi[dot][dot][dot]atterns/observer
(Добавление)
Хороший пример на Php можно найти в
Мэтт Зандстра "PHP. Объекты, шаблоны и методики программирования"
(Добавление)
Enj0y пишет:
тут кстати неудобство работает в обе стороны. То есть в случае если ранг должен изменится придется его вручную всем перепроставлять.Это мне кажется не удобным, потому как я могу завтра поменять что 1 получается при 12 сообщений
(Добавление)
https://refactoring[dot]guru/ru/desi[dot][dot][dot]atterns/observer
(Добавление)
Хороший пример на Php можно найти в
Мэтт Зандстра "PHP. Объекты, шаблоны и методики программирования"