» 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

Šéf amerického Red Hatu: Odpojte Brno od internetu a zhroutíme se

Šéf amerického Red Hatu: Odpojte Brno od internetu a zhroutíme se

** V Česku najdete hromadu skvělých vývojářů ** Mnozí z nich přispívají do open-source ** Třeba v brněnském Red Hatu

Jakub Čížek | 51

Blíží se Juno. Jeden z nejhezčích Linuxů pro normální lidi

Blíží se Juno. Jeden z nejhezčích Linuxů pro normální lidi

** Ubuntu a Fedora patří k nejpopulárnějším linuxovým OS pro desktop ** A pak je tu zástup dalších nebo jejich odvozenin ** Jedním z nich je Elementary OS, který se brzy dočká novinek

Jakub Čížek | 71

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

** Total Commander je na Windows takřka legendou ** Licence však stojí více než tisíc korun ** Našli jsme pro vás deset alternativ dostupných zdarma

Karel Kilián | 121

Google ADT-2: Miniaturní krabička s Android TV 8.0, kterou si nikdy nekoupíte

Google ADT-2: Miniaturní krabička s Android TV 8.0, kterou si nikdy nekoupíte

** Dlouho se nevědělo, co to přesně má být ** Pak se s krabičkou Google pochlubil na I/O ** Do „Chromecastu“ vtěsnal celý Android TV

Jakub Čížek | 22


Aktuální číslo časopisu Computer

Kdy necháme řídit chytrá auta?

6 Wi-Fi Mesh systémů ve velkém testu

Srovnali jsme 7 sportovních kamer

Znáte pravidla pro létání s drony?