Autor | Zpráva | ||
---|---|---|---|
BuGeR Profil |
#1 · Zasláno: 23. 9. 2013, 20:37:13
Zdravím,
mám MySQL tabulku users, ve které vedu uživatele, a mimo jiné také obsahuje sloupec "birthday" (datum narození ve tvaru XX.XX.XXXX), dále mám tabulku rehearsals, ve které mám sloupec "date", v této tabulce mám všechny úterky od září 2013 až po červen 2014 (24.09.2013, 01.10.2013 atd.) Co bych potřeboval je, vypsat všechna data (úterky) z tabulky rehearsals, a ke každému datu zjistit, zda neměl uživatel narozeniny. Nejedná se o narozeniny pouze v úterky, ale potřeboval bych projít jakoby všechny dny od jednoho úterý až k tomu dalšímu. Něco jako $user["birthday"] >= $rehearsal["date"] && $user["birthday"] < $nextRehearsal["date"] .
Nenapadá vás nějaké řešení? Já mám s tímto 2 problémy: 1. budu muset převést uživatelské data narození, na aktuální rok - s tím, že asi pokud je v rozmezí leden-červen budu muset nastavit rok 2014 (pro to porovnání v mezi jednotlivýma úterkama, pokud to bude porovnávat pro příští rok). Jak to mám udělat efektivně? Aniž bych nemusel procházet každé narození, a pomocí podmínky přiřadit 2013 nebo 2014? 2. jak mám v jednom cyklu, procházející jednotlivé data, zajistit, zda v rozmezí aktuálním procházeném AŽ příštím datu, nemá uživatel narozeniny? Polopatě: Jedná se o desítky lidí, kteří se scházejí každé úterý, a potřebujeme každé úterý zjistit, zda od minulého úterý neměl někdo narozeniny :-) Děkuji |
||
juriad Profil |
Za předpokladu, že změníš datový typ sloupce birthday na DATE. Nikdy neukládej datum nebo čas jako VARCHAR (ano i takový select by šel napsat, ale byl by o kilometr delší a o rok pomalejší).
Tento select by měl vrátit všechny uživatele, kteří měli narozeniny během minulého týdne. Jedná se o ty, jejichž věk je dnes větší než byl před týdnem. Chová se nejspíš divně kolem 29. února. SELECT * FROM users u WHERE TIMESTAMPDIFF(YEAR, u.birthday, '$today') > TIMESTAMPDIFF(YEAR, u.birthday, '$today' - INTERVAL 7 DAY) $today v PHP dosaď datum aktuální schůzky ve formátu yyyy-mm-dd .
|
||
BuGeR Profil |
#3 · Zasláno: 23. 9. 2013, 22:14:41
juriad:
Wow, děkuji za hotové řešení! Funguje bezvadně. |
||
BuGeR Profil |
#4 · Zasláno: 24. 9. 2013, 06:04:47
juriad:
Ještě bych se chtěl zeptat, nešel by ten dotaz upravit tak, aby když se vynechá nějaké setkání (v tabulce rehearsals se v sloupci "close" objeví hodnota 1), se "přesypaly" narozeniny, do dalšího setkání, které bude close=0? Jen pokud to není nějak moc náročné :-) |
||
Alphard Profil |
#5 · Zasláno: 24. 9. 2013, 06:53:37
Změňte hodnotu 7. Buď u již v PHP, nebo pomocí poddotazu. Může ten interval úplně vynechat a dát tam datum posledního proběhlého setkání.
|
||
BuGeR Profil |
#6 · Zasláno: 24. 9. 2013, 14:18:55
Alphard:
Děkuji |
||
Časová prodleva: 11 let
|
0