Autor Zpráva
BuGeR
Profil
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 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)
Za $today v PHP dosaď datum aktuální schůzky ve formátu yyyy-mm-dd.
BuGeR
Profil
juriad:
Wow, děkuji za hotové řešení! Funguje bezvadně.
BuGeR
Profil
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
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
Alphard:
Děkuji

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: