» Poradna » Programy

Tabulka s narozeninama

 |   | 

Dobry den,
poradte mi prosim jak udelat spravny dotaz na to abych z MySQL vytahl vsechny zaznamy ze sloupce narozeniny(DATE) z obdobi -7 az +31 dni(ale jakykoliv rok) ode dneska a vypsal je podle tech datumu.
Ja jsem to v pohode(aspon jsem si myslel) udelal pres DAYOFYEAR, a order by dayofyear(narozeniny), ale prech chvili mi doslo a prakticky jsem si overil, ze v obdobi kolem novyho roku je to nefunkcni resp. spatne funkcni.
Dale podotykam ze
"WHERE (DATEDIFF(narozeniny,CURDATE()) >= -7 AND DATEDIFF(narozeniny,CURDATE()) <= 31) ORDER BY narozeniny;"
zase vyhleda jen zaznamy v okoli toho dne ale ja potrebuju aby to nebylo "year sensitive".

ukazka je na http://chha.truhlarstvidp.com/forum.php v pravem sloupci, tam to mam zatim osetrene pres ten dayofyear, ale za par mesicu bude problem...
Jinak jeste bych podotkl ze mam MySQL 4.0.25

Predem dekuji za kazdou dobrou radu

Odpovědi na otázku

 |   | 

aaa

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Neznám přesně syntaxi MySQL, ale nešlo by udělat toto ?!? :

pom := ( DAYOFYEAR(CURDATE()) - DAYOFYEAR(narozeniny) ) ;

if
(( pom >= -31 ) AND ( pom <= 7 )) /* jen povoleny posun - zadne preteceni */
or ( pom - 365 >= -31 ) /* narozeniny budou zacatkem roku, CURADTE tesne pred koncem */
or ( pom + 365 <= 7 )) /* narozeniny byly koncem roku, CURADTE tesne po zacatku noveho */
then "ANO"


Vycházím z předpokladu, že se bude upozorňovatm ěsíc dpředu a týden zpětně.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Jen na vysvětlení - pokud to má být "year unsensitive", musíme zůstat u DAYOFYEAR. Případně šachovat s daty, které si poskládáme z měsíců a dnů těch dvou srovnávaných událostí (narozeniny x TODAY). Jenmže to už je lepší u DAYOFYEAR zůstat.

No a pak se ta úloha rozpadá na 4 části :

a) narozeniny byly před méně než stanovenou hranicí (v rámci jednoho roku) : diff >= -x AND diff <= 0
b) narozeniny budou za méně než stanovenou hranicí (v rámci jednoho roku) : diff <= +y AND diff >= 0

Takto to bylo udělané v současnosti - tyto dvě podmínky se ovšem dobře dají spojit do jedné : diff >= -x AND diff <= y

Zbývají dvě poslední možnosti, kdy mezi narozeniny a TODAY vstoupí konec roku. A ty se ošetří samostatně.

Víz možností naštěstní není ...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

No a prave to osetreni konce roku me zajima.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Ale vždyť to tam je, copak seš slepej ?!?!

...
or ( pom - 365 >= -31 ) /* narozeniny budou zacatkem roku, CURADTE tesne pred koncem */
or ( pom + 365 <= 7 )) /* narozeniny byly koncem roku, CURADTE tesne po zacatku noveho */
...

V prvním případě se odečítá rok, protože CURDATE se blíží konci roku (tedy je "skoro" 365) a "narozeniny" je ze začátku roku (tedy malé číslo) -> odečtením 365 se CURDATE "přetočí" před začátek roku (stane se záporným), ale v tu chvíli už se dá srovnávat s malým číslem DAYOFYEAR(narozeniny), protože obě budou mít "vzdálenost" rovnou rozdílu přes přelom roku.

Analogicky ve druhém případě - začátek nového roku (1., 2., 3. ... den) se příčtením "365" stane 366., 367., 368. ... dnem roku minulého a srovnání se takto opět převede na prostý interval.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Jop, diky, jsem po ranu nejakej oslepenej

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Super, funguje to presne jak by melo, s jednou malou vyhradou, uz asi hodinu si lamu hlavu s tim jak to spravne setridit.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Narozeniny, Tabulka, Order, Year




Určitě si přečtěte

Kryptoměnový milionář staví v Nevadě obří utopické město využívající blockchain na vše

Kryptoměnový milionář staví v Nevadě obří utopické město využívající blockchain na vše

** V USA vzniká rozsáhlý projekt postavený na blockchainu ** Milionář staví město, které bude fungovat zcela na blockchainu ** Blockchain bude základem pro vše, například i platby, ověřování identity a podobně

Karel Javůrek | 41

Mírumilovná Pilsneria čelila největšímu kybernetickému útoku v dějinách

Mírumilovná Pilsneria čelila největšímu kybernetickému útoku v dějinách

** Počítačové systémy Pilsnerie kolabují! ** Nejprve zaútočil hurikán Mozkyto, pak Sauronia ** Naštěstí jen během cvičení Cyber Czech 2018

Jakub Čížek | 6

Kvantový internet se blíží. Oproti tomu klasickému bude mnohem bezpečnější

Kvantový internet se blíží. Oproti tomu klasickému bude mnohem bezpečnější

** Jednotlivé bloky kvantového internetu už se pomalu vyvíjí a testují ** Kvantová síť už bude mít své uplatnění dříve, než bude všude dostupný kvantový internet ** Nejdříve půjde o doplněk ke klasickému internetu

Karel Javůrek | 15



Aktuální číslo časopisu Computer

Nejlepší programy pro úpravu fotek zdarma

Externí disky pro zálohu dat

Velký test: herní notebooky

Srovnání 12 batohů