| Autor | Zpráva | ||
|---|---|---|---|
| ffff Profil * |
#1 · Zasláno: 25. 7. 2010, 13:22:48
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 * |
#2 · Zasláno: 25. 7. 2010, 13:24:58
Ááá, 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 * |
#3 · Zasláno: 25. 7. 2010, 13:50:06
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 * |
#4 · Zasláno: 25. 7. 2010, 18:20:52
select year(`date`),month(`date`),count(*) from articles group by year(`date`), month(`date`) order by year(`date`) desc,month(`date`) desc; |
||
|
Časová prodleva: 15 let
|
|||
0