![]() |
![]() |
![]() ![]()
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: 6 807 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Tabela:
id_user, numer_osiagniecia, data_start, data_ostatni_postep, id_ostatni_postep Wpisujesz start danego osiągnięcia (nie wiem kiedy u Ciebie przypada ten termin - po zrealizowaniu pierwszego postępu?). Kiedy użytkownik zrealizuje dany postęp, wpisujesz (aktualizujesz) jego date i id w tabeli. id_ostatni_postep informuje czy użytkownik osiągnał całość. Możesz też dodać odrębne pole na wartość postępu. To jest najprostsze rozwiązanie, ale niekoniecznie najlepsze. Innym było po prostu zapisywanie kolejnych postępów: user_osiagniecie: id_user_numer_osiagniecia, id_user, numer_osiagniecia, data_start osiagniecie_postep: id_user_numer_osiagniecia, data_postep, id_postep lub na jednej tabeli, jeśli data startu osiągnięcia jest równoznaczna z zakończeniem pierwszego postępu: id_user, numer_osiagniecia, data_postep, id_postep Wszystko zależy od specyfiki Twojego problemu. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 04:46 |