Autor Zpráva
popelka
Profil *
Čaute,
nenapadá Vás ako zapísať pre aktuálny mesiac do DB jeho počet dní ? Aktuálny mesiac a jeho počet dní viem získať nasledovne :
if(!IsSet($month)) $month = Date("m"); // ak mesiac nie je inicializovany zober aktualny mesiac
if(!IsSet($year)) $year = Date("Y"); //ak nie je rok inicializovany zober aktualny rok
//prevod na konkretne hodnoty
$year = Date("Y", MkTime(0,0,0, $month, 1, $year));
$month = Date("m", MkTime(0,0,0, $month, 1, $year));
$count_days = Date("t", MkTime(0,0,0, $month, 1, $year)); // pocet dni v mesiaci
Pepiik
Profil
$count_days = (MkTime(0,0,0, $month+1, 1, $year)- MkTime(0,0,0, $month, 1, $year))/60/60/24
Joker
Profil
Pepiik:
Už v [#1] je (lepší) způsob, jak získat počet dní měsíce.

popelka:
Na co směřuje otázka? Počet dní v měsíci už máte a do databáze se to zapíše normálně jako číslo.
Ale jestli se do DB ukládá ten měsíc a rok, je asi zbytečné ukládat i počet dní, který z toho jednoznačně vyplývá.
Pepiik
Profil
Pardon moje chyba.. blbě jsem to pochopil. On už to má vlastně hotové a jen to chce uložit.
popelka
Profil *
Joker:
Na co směřuje otázka?
Robím kalendár akcií a preto som sa snažil získať počet dní v mesiaci aby som ich mohol zapísať do DB stále pre aktuálny mesiac, následne som niektorým dňom priradil akciu. Lenže medzičasom mi došlo, že toto riešenie asi nie je dva krát dobré. Lebo ak mi 7 uživateľov vloži záznam na jeden den hneď mám 7x zapísaný jeden deň a mnoho dní mi v DB ostane len prázdne vysieť.

Zase ak zapíšem do DB len dni počas, ktorých je akcia pri výpise ich neviem odlíšiť od ostatných dní. Preto som zapisoval všetky dni v mesiaci do DB.
Joker
Profil
popelka:
Proč ukládat do DB každý den? Stačí jen ke každé akci uložit datum.
popelka
Profil *
Joker:
Tento spôsob ma nenapadol. Napadá ma otázka ak nastane prípad, že daná akcia bude trvat celý mesiac ? Potom by ste navrhoval aké riešenie ?
Alphard
Profil
Akce trvající delší dobu se obvykle ukládají s daty Od–do. Jestli trvání celý měsíc není nějak charakteristické, mělo by se ukládat standardně od 1.6. do 30.6.
popelka
Profil *
Alphard:
Ano súhlasím s Vami tento spôsob riešenia by bol najlepší. Jednoducho by sa akcie aj s dátumom zapísali do DB aj z nej vypisovali.
Po mne však chcú aby výpis jednotlivých akcií vyzeral nasledovne pre užívateľov :

J=jazdenie,C= čítanie, "-" nemá v daný deň žiadnu akciu,
čiže ak uživateľ 1 má celý mesiac jazdenie oni tam chcú mať 30/31 dní J, samozrejme môže to byť kludne len 10 dní.

uzivatel/den |1|2|3| .........28|29|30|
1           |J|J|J| ..........| - | -  | -  |
2                   |C|C|-| ........|C |C  |C  |
3                   |J |C|J| ........|C| - | | C |
Alphard
Profil
Mezi ukládáním dat a jejich prezentací je značný rozdíl, na každou činnost jsou odlišné požadavky. Výše jsme se bavili o jejich ukládání.
Nyní jde o zobrazení, tedy o transformaci dat uložených v normálních formách do požadované podoby. Jak to například řešit?

Získat akce vztahující se k danému uživateli a měsíci. Pak iterovat po jednotlivých dnech a u každého dne zjistit, jestli na něj vychází nějaká akce. Pokud se akce nemohou překrývat, šlo by je seřadit podle začátku a proiterovávat ten seznam, bylo by to rychlejší, ale i složitější.
popelka
Profil *
Alphard:
Mezi ukládáním dat a jejich prezentací je značný rozdíl, na každou činnost jsou odlišné požadavky.
Súhlasím s Vami. Lenže ak nenájdem aspoň trošku vhodný spôsob ukladania dát do DB, čo ste mi už načrtol ako by mohlo vyzerať, tak výpis daných dát bude omnoho tahší. Preto som chcel vedieť ako by sa mali tieto veci zapisovať a uviedol som aj príklad výpisu.

Pokud se akce nemohou překrývat, šlo by je seřadit podle začátku a proiterovávat ten seznam, bylo by to rychlejší, ale i složitější.
Neviem či Vás úplne správne chápem s tým prekrývaním akcií. Ak máte na mysli, že jedna akcia môže byť počas jedného dňa u viacerých užívateľo tak odpoveď je ano. (Každý uživatel ma pre jeden deň len jednu akciu alebo žiadnu)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: