Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Повышение ранга

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Enj0y
Отправлено: 07 Октября, 2019 - 14:11:26
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Окт. 2019  


Помог: 0 раз(а)




Добрый день, коллеги.

Хотел бы задать вопрос, о том, как лучше реализовать логику присвоения нового звания на форуме по достижению опред кол-ва сообщений пользователем.

Имеем таблицу с рангами и кол-вом сообщений необходимых для получения оных.
0 - 0
1 - 10
2 - 15
3 - 30
...

В таблице пользователей, имеем столбец rang и count_message

Как логично при такой структуре осуществить проверку и присвоение ранга, если допустим у пользователя user уже есть 9 сообщений и он пишет 10ое, что бы ранг сменился на "1".

мысли разные и не очень оптимальные на ум приходят, и возможно не хорошо хранить инфу о текущих сообщениях и текущем ранге в таблице пользователя и лучше вынести в отдельную таблицу, но все же... помогите советом, попробую набросать у себя...
 
 Top
LIME
Отправлено: 07 Октября, 2019 - 15:31:30
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




А зачем вообще ранг? Тут достаточно количество хранить, а таблицу соответствия я бы в код перенес. Она же не меняется динамически в какой-нибудь админке?
Ранг отображать в зависимости от количества на лету.
(Добавление)
То есть вычислять при загрузке данных из бд.
 
 Top
Enj0y
Отправлено: 07 Октября, 2019 - 15:33:46
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Окт. 2019  


Помог: 0 раз(а)




Это мне кажется не удобным, потому как я могу завтра поменять что 1 получается при 12 сообщений, но мне надо что бы у того кто 10 набрал уже был 1й, т.к. он уже получил его.

Давайте соотнесем это с получением опыта, как будто это игра.
Получил 10 опыта - 1 уровень и тд.

Поможете?
 
 Top
LIME
Отправлено: 07 Октября, 2019 - 15:40:45
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Ну это конечно меняет дело. Советую рассмотреть паттерн Observer и повесить событие на обработку полученного сообщения. Хранить наверное лучше в той же таблице потому как все равно понадобится при загрузке юзера из бд по любому. Зачем лишние запросы, джойны.
(Добавление)
Enj0y пишет:
Это мне кажется не удобным, потому как я могу завтра поменять что 1 получается при 12 сообщений
тут кстати неудобство работает в обе стороны. То есть в случае если ранг должен изменится придется его вручную всем перепроставлять.
(Добавление)
https://refactoring[dot]guru/ru/desi[dot][dot][dot]atterns/observer
(Добавление)
Хороший пример на Php можно найти в
Мэтт Зандстра "PHP. Объекты, шаблоны и методики программирования"
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB