![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 4.05.2019 Skąd: PHP5.6 Ostrzeżenie: (0%) ![]() ![]() |
Załóżmy, że chce wyświetlić użytkownikowi możliwość zdobywania osiągnięć, a każde osiągnięcie ma swój własny postęp i zostanie zrealizowane gdy osiągnie swój max.postęp - o ile max.postęp zostanie osiągnięty w max.30dni od chwili zrealizowania pierwszego postępu.
Przykład: 1. Tytuł osiągnięcia: Aktywny komentator 2. Opis osiągnięcia: podejmij się napisania 15x różnorodnych komentarzy powyżej 100 znaków w ciągu 30 dni. 3. Postęp: 0 / 15 Stworzyłem sobie funkcje, która wyświetla właściwy html, ale mam zagwozdkę jak rozsądnie stworzyć bazę danych, bo każde osiągnięcie można zrealizować wciągu 30 dni od chwili zrealizowania pierwszego "postępu", a to wyklucza proste i optymalne rozwiązanie jakim jest wrzucenie wszystkiego w jedną tabele pod ID_USERA i jedynie updatowanie poszczególnych osiągnięć +1 w danym wierszu. Tutaj raczej trzeba dodać jeszcze date realizacji i ew. crona do czyszczenia, a to generalnie zrobi wielki ruch w tabeli, bo z np. 1000000 wpisów zrobi się 1000000*ilość osiągnięć*max.postęp. Nie jestem zbyt zaawansowany więc niestety nie znam wielu fajnych rozwiązań więc zanim zrobię to tak, jak to widzę w powyższym okropnym opisie wolę zapytać czy istnieje lepszy pomysł? Tak to widzę:
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 4.05.2019 Skąd: PHP5.6 Ostrzeżenie: (0%) ![]() ![]() |
może przystąpić jeszcze raz, ważne aby osiągnął komplet w 30 dni - jeżeli nie osiągnie kompletu, to kolejno każdy postęp osiągnięcia będzie wygasać po 30 dniach.
edit: Teraz wpadłem na trochę inny pomysł,a mianowicie stworze 30 kolumn odpowiadające za każdy dzień z trzydziestu i jeśli jakieś osiągnięcie zostanie zrealizowane danego dnia, to przypisze mu unikalny identyfikator z sumą i wpakuje do bazy, a później jakoś w PHP to poskładam w całość: Coś tego typu:
Ale to nadal tylko gdybanie nad sensownym rozwiązaniem. edit2: To rozwiązanie jest niewypałem... bo jeśli user zrealizuje pierwsze osiągnięcie 30 dnia, to powinien mieć czas 30 dni na realizacje całego postępu, a tu w teorii wszystko powinno być kasowane (IMG:style_emoticons/default/dry.gif) Czyli całość musi być oparta na datach i wychodzi na to, że pierwsze założenie jest niestety prawidłowe. (IMG:style_emoticons/default/sciana.gif) edit3: Chyba że dodam kolejną kolumnę z nazwą osiągnięcia i pierwszy postęp to będzie `dzien1`. Następnie z wszystkich kolumn stworze tzw. licznik aby wiedzieć na którym dniu jest aktualnie dane osiągnięcie. Mogę to chyba zrobić za pomocą crona dodając każdego dnia +1 do `dzien2` (tj. nastepnego dnia gdzie dzienX==0) - w sensie jeśli dzień >0 i następny dzień==0, to jest to ten dzień na którym stoi całe osiągnięcie. Później w PHP odejmę 1 od każdego dnia i uzyskam prawidłową sume postępu danego osiągnięcia... Dzięki temu zredukuje tone wpisów i liczenia o ile myślę w prawidłowy sposób haha (IMG:style_emoticons/default/co_jest.gif)
Tu jest chyba taki minus, że każdy postęp osiągnięcia NIE będzie wygasać po 30 dniach, a zamiast tego wygaśnie całe osiągnięcie wraz z wszystkimi postępami, ale to raczej lepsze rozwiązanie od pierwszej metody. Ten post edytował phpuser88 1.05.2022, 15:09:22 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 00:38 |