Autor Zpráva
stepanka
Profil *
Ahoj,

neuměl by mi někdo, prosím, poradit? Už si nevím rady..

Mám tabulku "vysledky", na datech nezáleží, ale poslední sloupec má název "time" a je typu DATETIME. A já bych z této tabulky potřebovala vybrat všechny záznamy vždy po dvou měsících (lichý + sudý), asi takto:

05/2012 a 06/2012
jména a příjmení výherců za tyto dva měsíce...

03/2012 a 04/2012
jména a příjmení výherců za tyto dva měsíce...

atd.

Mám něco takového:
SELECT *,
MONTH(time) mesic,
YEAR(time) rok 
FROM vysledky 
ORDER BY time DESC

a pak to zkouším rozdělit v PHP, ale napadlo mě, že by to mohlo jít už v rámci dotazu.

Předem moc děkuju za případné rady.
Kajman
Profil
Asi bych to nechal na tom php, bude to obdoba
Nejčastější potíže s PHP (FAQ) » Nadpis skupiny nejen při výpisu z databáze
stepanka
Profil *
Kajman:
Děkuju za reakci. Bohužel v tom PHP to není tak jednoduché. Systém je totiž hra, kde uživatelé sbírají body. Každé kolo je od 1. dne lichého měsíce po poslední den sudého měsíce. Na konci každého sudého měsíce se výsledky archivují a uživatelé mohou začít hrát zase od nuly.

Neuměl by někdo alespoň vybrat z té tabulky data, která jsou archivovaná? To znamená, která se nenacházejí v aktuálním měsíci (pokud je měsíc lichý), a nebo v aktuálním a předchozím měsíci (pokud je nyní měsíc sudý)? Stačilo by mi takto vybrat jen ty datumy, pak už bych u každého výsledku provedla klidně druhý SELECT na ostatní data.

Ty funkce pro datum a čas v MySQL jsou strašně složité..
Kajman
Profil
Pokud není šance programovat v php, asi bych si udělal pomocnou tabulku, kde jeden řádek bude jedno soutěžní období. Sloupce od, do budou určovat interval sloupce time z tabulky vysledky. Aktuálnost období může být stanovená příznakem nebo spadnutí aktuálního času mezi od a do.
stepanka
Profil *
Kajman:
Asi jo, dám tam buď sloupeček navíc, nebo další tabulku. To bude nejlepší. Tak moc díky za navedení k řešení.
Joker
Profil
Myslím, že seskupit data tak, aby byla po 2 měsících a seskupený lichý s následujícím sudým by šlo asi takhle:
GROUP BY FLOOR((mesic+1)/2)
Kajman
Profil
stepanka:
dám tam buď sloupeček navíc

Ale o tom sloupečku navíc jsem psal jen u té nové pomocné tabulky.

Bez pomocné tabulky to je možné také - vypočítat si ty hranice pro aktuální období a použít je do where, ale nový sloupec do tabulky vysledky bych nedával.
stepanka
Profil *
Joker:
Moc děkuju, ale už to mám hotové s pomocnou tabulkou.

Kajman:
Jasně, mám tabulku navíc, funguje to krásně a byla to docela rychlovka. Děkuju.

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: