![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 87 Pomógł: 2 Dołączył: 23.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Chcę zrobić spotykane w grach przeglądarkowych budowanie jakiś budynków, czyli klikamy buduj i jest np czas budowy 3 minut. Na potrzeby nauki zrobiłem to tak:
baza: id, nazwa_budynku, koniec "koniec" jest typem datetime mam formularz i sobie dodaję mniej więcej tak:
dodaje mi czasy w formacie "2011-06-24 19:50:36", o trzy minuty wiecej niz data z serwera czyli jest OK. Teraz chciałbym mieć licznik ile czasu pozostało do końca budowy a potem oczywiście żeby w bazie ta budowa się zaznaczyła, z samą operacja w bazie dam radę tylko jak to zrobić żeby to się zrobiło samo z siebie po przejściu tego licznika? Do tego jest chyba CRON ale czy można z poziomu PHP dawać mu zadania, mogę korzystać tylko z directadmina. I czy w ogóle mam na to dobry pomysł? może (raczej tak) da się to zrobić lepiej... proszę o pomoc.... Ten post edytował pain3hp 24.06.2011, 19:29:16 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 690 Pomógł: 92 Dołączył: 6.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
auu, jeszcze mi powiedz, że datę trzymasz w varchar
![]() Daty nie trzyma się normalnie, unix_timestamp jest łatwy w obróbce, a przy gotowej dacie bawisz się w funkcje i tracisz moc serwa... Równie dobrze, jak nie masz dostępu do crona, przy każdym requeście robić zapytanie, które zaznacza budynki mające więcej niż te 3 minuty, że są wybudowane. Jeżeli zaś masz crona, odpalaj plik przez nieggo co jakiś czas. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 87 Pomógł: 2 Dołączył: 23.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
datę trzymam w DATETIME, to jest źle?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 14 Dołączył: 25.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
sam tez jestem w trakcie tworzenia autorskiej gry via www i jesli jakakolwiek date trzymasz w bazie to trzymaj ja w surowej postaci samych liczb, czyli najlepiej takiemu polu tabeli nadac typ int(11), a w zapytaniu dajesz
... set data_cos_tam = ".time()."... mniej wiecej poprawiony ten twoj kod:
i sam widzisz o ile mniej niepotrzebnych linijek kodu, co do licznika to wklejasz ponizszy kod na stronie:
a czas do zakonczenia budowy wyswietlasz banalanie jak ponizej:
jezeli na jednej stronie jest potrzebne odliczanie czasu dla kilku elementow to po prostu dla kazdego dajesz inne id_odliczania |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 87 Pomógł: 2 Dołączył: 23.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
DZIEKI!!!
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Cytat to trzymaj ja w surowej postaci samych liczb, czyli najlepiej takiemu polu tabeli nadac typ int(11) Cytat i sam widzisz o ile mniej niepotrzebnych linijek kodu A Ty sam zobaczysz jak bardzo będziesz tego żałował jak tylko przyjdzie Ci wykonać jakieś operacje na dacie i będziesz musiał cały silnik przerabiać. Datę trzyma się w jednym z formatów daty, jeżeli trzymasz ją jako INT() to przekreślasz sobie możliwość korzystania z tych funkcji http://dev.mysql.com/doc/refman/5.5/en/dat...-functions.html I w tym wypadku zaoszczędzenie 1 dodatkowej linijki kodu to nie jest optymalizacja tylko zły nawyk |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 14 Dołączył: 25.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
jak to napisales "mam ten zly nawyk" i poki co chyba tak jeszcze bede go mial, jednak mam jedno pytanie, ktore nie wiem czy jest prawda, jesli sobie pobiore ta date z bazy z pola int to czy jesli ja sobie sformatuje do takiego samego stanu jak powinna wygladac, gdy typ pola to datetime to czy bede mogl wtedy uzywac tych funkcji? chyba tak... chodz wlasnie pewien nie jestem wiec wyjasnij
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
chodzi o to, że do póki nie potrzebujesz z tą datą nic więcej robić to jest ok, ale załóżmy, że będziesz chciał zrobić użytkownikowi jakieś statystyki co będzie wymagało zliczania, sumowa, grupowania wyników z różnych podziałów czasu to wtedy pojawi Ci się problem i będziesz zmuszony tworzyć jakieś bardzo nie wydajne kombinacje, jest to zwłaszcza istotne w przypadku gier gdzie bazy danych bardzo szybko rosną i wydajność jest kluczowym elementem
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 05:25 |