Autor Zpráva
pito
Profil
Zdar,
Mám v databázi tabulku s počtem uživatelů.
            id    day        user  view
            1    2015.03.29    1      8
            2    2015.03.30    33    36
            3    2015.03.31    6      9
            4    2015.04.01    5      34
            5    2015.04.02    2      5
            6    2015.04.03    9      39
            7    2015.04.04    3      16

Chci se zeptat jak udělám tabulku a v ní vypsané měsíce a součet uživatelů na každý měsíc
př.

     
   
Uživat: 0      0       40        19  
Měsíc:  Leden  Únor  Březen  Duben ........  
          
Petr Ká
Profil
Naslepo; zkus:

SELECT SUM(user), MONTH(day) FROM _tabulka_ GROUP BY MONTH(day)
blaaablaaa
Profil
SUM uzivatelu + GROUP BY dle mesice a roku a ziskas v jednom radku vzdy mesic a pocet uzivatelu
Petr Ká
Profil
blaaablaaa:
Jestli i podle roku, použil bych spojení:

SELECT SUM(user) AS pocet, CONCAT(MONTH(day),".",YEAR(day)) AS mesic FROM _tabulka_ GROUP BY CONCAT(MONTH(day),".",YEAR(day))

Výsledkem by bylo:

mesic | pocet
01.2015 | 12
02.2015 | 25
03.2015 | 40
pito
Profil
zapsal jsem to tak ale někde je asi chyba v zápisu si myslím,ale nemůžu jí najít :D :(

$vyber = MySQL_Query("SELECT SUM(user) AS pocet, CONCAT(MONTH(day),".",YEAR(day)) AS mesic FROM chilli_stats_1_Day GROUP BY CONCAT(MONTH(day),".",YEAR(day)")or die(mysql_error()); 
 
 
while ($zaznam2=MySQL_Fetch_Array($vyber)){
  $dataset1[] = array($zaznam2['mesic'],);
   $dataset2[] = array($zaznam2['pocet']);

   echo $dataset1;
  echo $dataset2;
}
Taps
Profil
pito:
$vyber = MySQL_Query("SELECT SUM(user) AS pocet, CONCAT(MONTH(day),".",YEAR(day)) AS mesic FROM chilli_stats_1_Day GROUP BY CONCAT(MONTH(day),".",YEAR(day)")or die(mysql_error()); 
 
 
while ($zaznam2=MySQL_Fetch_Array($vyber)){
echo $zaznam2['mesic'].' - '.$zaznam2['pocet'].'<br>';

}
juriad
Profil
Petr Ká:
Proč takové harakiri s řetězci?
SELECT SUM(user) AS pocet, YEAR(day) AS rok, MONTH(day) AS mesic FROM tabulka GROUP BY YEAR(day), MONTH(day) ORDER BY YEAR(day), MONTH(day)

Měsíc ve tvaru "5.2015" si pak zformátuješ v PHP.
pito
Profil
ono mi to,ale vypsalo jen pátý měsíc jak nastavím aby to vypsalo posledních 12 měsíců?
LIMITEM?
Keeehi
Profil
pito:
Limitem maximálně tak něco omezíš ale nic nepřidáš. A jsi si jistý, ze máš v databázi záznamy i z jiných měsíců než jen z května?
juriad
Profil
To proto, že sloupec day není DATE, ale je to nějaký VARCHAR. Pak se nemůžeš divit, že to nefunguje. Datumy do databáze nikdy neukládej jako VARCHAR.
Lze sice napsat dotaz i tak, ale ohromně ošklivý a velice pomalý. A rozhodně jej zde nebudu psát, abych někoho nenavedl.
pito
Profil
Keeehi:
ano mám tam i jiné měsíce

juriad:
Měl jsem tam Varchar, ale změnil jsem to na DATE a stejně mi to ukazuje pořád jen ten pátý měsíc
Keeehi
Profil
pito:
A když ten dotaz vezmeš a pustíš ho ručně, tak ti to taky vrátí jen jeden výsledek?
pito
Profil
Keeehi:
A když ten dotaz vezmeš a pustíš ho ručně
trochu nerozumím
lionel messi
Profil
pito:
Keeehi:
„A když ten dotaz vezmeš a pustíš ho ručně“
trochu nerozumím
Napríklad v PHPMyAdmin (alebo akomkoľvek programe na prácu s databázou.
pito
Profil
tak jsem tam přidal čtvrtý měsíc a vypsalo mi to čtvrtý měsíc ty další měsíce už ne


tak je to funkční. Super. díky
Ještě když chci zobrazit jen prvních 12 měsíců tak to provedu tím limitem že?
Taps
Profil
pito:
ano, omezení výpisu provedeš limitem
pito
Profil
nastavil jsem ten LIMIT a vypisuje mi to nějak divně

chci aby mi to vypsalo posledních 12 měsíců a místo toho mi to sice vypíše 12 měsíců,ale nejsou popořadě jsou nějak přeházené.
Má být vypsano:
červen     červenec     srpen    září    říjen   listopad    prosinec    leden    únor    březen    duben    květen
a místo toho tam mám tohle:
0   prosinec   listopad    říjen    září   srpen   červenec   červen   květen    duben    prosinec    listopad

tak to mám zapsané:
$vyber = MySQL_Query("SELECT SUM(user) AS pocet, YEAR(day) AS rok, MONTH(day) AS mesic FROM chilli_stats_1_Day GROUP BY YEAR(day), MONTH(day) ORDER BY YEAR(day), MONTH(day) DESC LIMIT 12")or die(mysql_error()); 
juriad
Profil
pito:
Ono to řadí tak, jak jsi tomu řekl.
Napřed jsou údaje za rok 2014 a pak údaje za rok 2015. Jednotlivé měsíce v těch rocích jsou od konce (prosinec až leden). Na toto bys přišel, pokud by sis vypsal nejen měsíc, ale i rok.

Změň tedy řazení:
ORDER BY YEAR(day), MONTH(day)
nebo:
ORDER BY YEAR(day) ASC, MONTH(day) ASC
řazení ASC (tedy vzestupně - od malých k větším) je výchozí, nemusí se výslovně uvádět.

Není mi však jasné, kde se tam vzala ta 0. Nejspíš někde jinde (u výpisu) budeš mít ještě nějakou chybku.
pito
Profil
ASC není správne ono to vypíše od roku 2010 kde mám začátek přístupů. Když jsem to změnil na DESC tedy:
ORDER BY YEAR(day) DESC, MONTH(day) DESC tak to vypsalo následovně:

(dál jsem si tam i roky)
5,2015    4,2015    3,2015     2,2015   1,2015    12,2014    11,2014    10,2014    9,2014    8,2014    7,2014    6,2014
no aspoň že ta nula se ztratila :) ale stejně je to pořád špatně hm
Nejnovější měsíc by měl být úplně v pravo neboť ty údaje dávat dl do grafu line
juriad
Profil
Aha, takže ty chceš posledních 12 měsíců vypsaných vzestupně. OK. Dej tedy oběma DESC a pak to obal ještě jedním dotazem:
SELECT * FROM
(
  SELECT SUM(user) AS pocet, YEAR(day) AS rok, MONTH(day) AS mesic
  FROM chilli_stats_1_Day
  GROUP BY YEAR(day), MONTH(day)
  ORDER BY YEAR(day) DESC, MONTH(day) DESC
  LIMIT 12
) x
ORDER BY rok ASC, mesic ASC
To x je povinný alias, který může být cokoli. V tomto případě se nepoužije.
pito
Profil
Suprové. Dobry si juriad
Dík


ještě maličkost dál jsem si ještě statistiku roků. Tedy spočítá počet návštěvníku za daný rok a vypíše.
Jenomže se mi na začátku objeví zas ta nula

Mně to započítává od 11.4.2010 a výpis roku mám takový:
počet:  0      201        220         358        380         458         258 
rok:     0     2010       2011      2012      2013       2014       2015
pito
Profil
seknul jsem se na názvy měsíců.

while ($zaznam2=MySQL_Fetch_Array($vyber)){

setlocale(LC_ALL, 'czech');
 $dataset1[] = array(strftime('%B', strtotime($zaznam2['mesic'])));
   $dataset2[] = array($zaznam2['pocet']);

a výsledek je, že tam mám všude napsané měsíc leden

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: