» Poradna » Programy

Tabulka s narozeninama

Odpovědět  |  Zobrazit bez stromu  |  Upozornit redakci  |  nových odpovědí: 7/7
 |   |   |  [147.229.221.---]

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

 |   |   |  [147.229.221.---]

aaa

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [80.188.226.---]

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
 |   |   |  [80.188.226.---]

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
 |   |   |  [147.229.221.---]

No a prave to osetreni konce roku me zajima.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [80.188.226.---]

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
 |   |   |  [147.229.221.---]

Jop, diky, jsem po ranu nejakej oslepenej

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [147.229.221.---]

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, Order



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


Čína vyvíjí ohromná hejna tisícovek malých dronů

Čína vyvíjí ohromná hejna tisícovek malých dronů

** Vývoj hejnové inteligence pro drony v Číně nabírá na rychlosti ** Velká hejna dronů mají podle odborníků značný potenciál pro vojenské využití i pro bezpečnostní aplikace ** Číňané se navíc s drony neomezuje jenom na zemský povrch a okolí, ale poohlížejí se i po vesmíru

11.  1.  2018 | Stanislav Mihulka | 3

Genetika a příjmení: Unikátní možnost získat test Y-DNA zdarma a dozvědět se o svých předcích

Genetika a příjmení: Unikátní možnost získat test Y-DNA zdarma a dozvědět se o svých předcích

** Projekt Genetika a příjmení hledá shody mezi osobami se stejným příjmením ** Využívá k tomu testování DNA na chromozomu Y ** Výsledky testu můžete účastí v projektu získat zdarma

11.  1.  2018 | Marek Lutonský | 2


Aktuální číslo časopisu Computer

Zachraňte nefunkční Windows

Jak nakupovat a prodávat kryptoměny

Otestovali jsme konvertibilní notebooky

Velký test 14 herních myší