Autor Zpráva
ffff
Profil *
Ahoj!

Mám v databázi tabulku s články, které mají sloupce DATE (= kdy byli vytvořeny). Kromě výpisu článků chci udělat i jakýsi archiv, odrážkový seznam, kde bude ke každému měsíci vypsáno kolik bylo napsano článků v tom období. To všem limitovat max sedm měsíců dozadu (od současného data), ale zároveň vynechávat měsíce kdy nebylo nic napsáno, tzn, pokud bude v každém měsíci krom druhého zpátky něco napsaná, dotaz by se měl zanořit vlastně o osm měsíců dozadu, protože vynechá ten předchozí měsíc, jež je prázdný. Pro kontrolu tedy rekapitulace co má dotaz dělat:

- projet všechny články v databázi
- zjistit u nich date, konkrétně rok a měsíc
- pokud daná kombinace rok/měsíc ve výsledku dotazu už je, inkrementovat nějaký další vracený sloupce (=počet článků v tom měsíci)
- pokud daná kombinace rok/měsíc ve výsledku ještě není, zapsat jí tam a nastavit jí počet výskytů na jedničku

Mám jisté tušení, že by to mělo jít s použitím dočasné tabulky (tam bych vytvářel ty řádky pro každý měsíc a k nim připsal počet článků). Napadlo mě taky řešit to s pomocí PHP, ale pravdou je, že MySQL je v mnoha ohledech dost flexibilní, takže jsem si jistý, že na to bude stačit dotaz do databáze. Čím už si ale nejsem tak jistý je struktura toho dotazu. Co jsem tak nějak vymyslel je tohle:

create temporary table archive(y int, m int, c int);
insert into archive select year(date),month(date),0 from articles group by month(date);
select * from archive;


To mi vytvoří tu dočasnou tabulku a články seskupí podle měsíce... Jak ale v průbehu toho dotazu ty články k tomu kterému měsíci ještě spočítat?
ffff
Profil *
Ááá, omlouvám se, vzápětí hned po odeslání jsem našel funkci Count. Má chyba, omlouvám se a prosím o odstranění vlákna.
ffff
Profil *
Tak se zdá, že jsem se opět unáhlil. Tento dotaz pracuje správně, podle zadání, ale naprosto ignoruje roky, článek z roku '09 a '10 se stejným měsícem seskupí do kategorie '10...

create temporary table archive(Year int unsigned, Month tinyint unsigned, Count tinyint unsigned);
insert into archive select year(date),month(date),count(*) from articles group by month(date) order by year(date) desc,month(date) desc;
select * from archive;
Kajman_
Profil *
select year(`date`),month(`date`),count(*) from articles 
group by year(`date`), month(`date`)
order by year(`date`) desc,month(`date`) desc;

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: