» 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

Jak horko bude ve vašem městě, až vám bude 80 let? Podívejte se, jak se projeví klimatické změny!

Jak horko bude ve vašem městě, až vám bude 80 let? Podívejte se, jak se projeví klimatické změny!

** Srpen byl třetí nejteplejší za posledních více než sto let ** Bude to ale daleko horší, jak ukazuje aplikace NYT ** V Praze vzroste počet horkých dní na čtyřnásobek

Karel Kilián | 21

Proč je pro obézní lidi tak těžké shodit nadbytečná kila?

Proč je pro obézní lidi tak těžké shodit nadbytečná kila?

** Obézním lidem selhávají mechanismy, jež je mají chránit před nadměrným příjmem potravy ** Mozek tlouštíků ignoruje hormon leptin varující před hromaděním tukové tkáně v těle ** Vědci nyní odhalili, jak to udělat, aby mozek otupený obezitou leptin opět vnímal

Jaroslav Petr | 46

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 66

Windows 95 slaví 23 let. Vzpomínáte na ně? Jak dlouho jste je používali?

Windows 95 slaví 23 let. Vzpomínáte na ně? Jak dlouho jste je používali?

** 24. srpna 1995 zahájil Microsoft prodej Windows 95 ** Uvedení na trh doprovázela masivní reklamní kampaň ** I 23 let poté je určitě na co vzpomínat!

Karel Kilián | 118

Američtí mariňáci si tisknou kasárna z betonu na 3D tiskárně

Američtí mariňáci si tisknou kasárna z betonu na 3D tiskárně

** Americká námořní pěchota nedávno představila 3D tištěná kasárna pro vojáky ** Ty jim tiskne velká 3D tiskárna na beton ** Výsledkem je solidní obytný prostor, který je slušně chráněný před nepřátelskou palbou

Stanislav Mihulka | 18

Alza si za osobní odběr účtuje už 45 Kč. Když zaplatíte předem, dostanete slevu

Alza si za osobní odběr účtuje už 45 Kč. Když zaplatíte předem, dostanete slevu

** Osobní odběr v Alze vyjde na 45 Kč ** Když zaplatíte kartou předem, dostanete slevu 30 Kč ** Většina ostatních e-shopů poplatek za osobní odběr nevede

David Polesný | 171


Aktuální číslo časopisu Computer

Megatest: 13 grafických karet

Srovnání 7 dokovacích stanic s USB-C

Jak na perfektní noční fotografie

Kvalitní zdroje informací pro sebevzdělávání