Autor Zpráva
danhill
Profil
Ahoj,
prosím potřebuji pomoci s dotazem do databáze.
Mám tabulku
[table] (date,code,)

code je jedinečný, ale date se může opakovat.

A já potřebuji podklady pro vytvoření grafu.
Tedy nějaké pole, kdy ke každému datu v table přičtu počet code.
Zkusím uvést příklad.
Table obsahuje tyto data:
2013-05-09 ; 23XD1
2013-05-09 ; 23XD2
2013-05-09 ; 23XD3
2014-10-29 ; 23XD4
2014-10-29 ; 23XD5
2015-05-20 ; 23XD6

Výsledek by měl vypadat asi takto
['2013-05-09', '3'],['2014-10-29', '5'],['2015-05-20', '6']

Předem moc děkuji za pomoc.
Alphard
Profil
V SQL se blbě dělá to postupné přičítání. Viděl bych to na count(code) + group by date + order by date a na straně aplikace to posčítat.

Jestli trváte na SQL řešení, odkáži vás na stackoverflow.com/a/2563940.
danhill
Profil
Ne ne, určitě netrvám na SQL řešení.
Klidně to může být více dotazů + php a vypsát to do array...
Jen uplně nevím jak na to,no .
Alphard
Profil
Já jsem ten jednodušší způsob napsal téměř celý
select `date`, count(code) pocet from tabulka group by `date` order by `date`
vrátí záznamy z tabulky seskupené a setřízené podle data, z té ukázky by vrátilo ['2013-05-09', 3],['2014-10-29', 2],['2015-05-20', 1], takže při zpracování stačí přičítat počty k jedné proměnné, aby se získala kumulativní suma, tj. 3 + 2 + 1.

To odkazované řešení provádí celý výpočet na úrovni SQL, a to buď pomocí korelovaného poddotazu, nebo proměnných.
danhill
Profil
jaj, moc děkuji, to by mohlo fungovat.
Zkusím se s tím poprat a dám vědět.
Každopádně mockrát děkuji.
danhill
Profil
Stejně nemůžu přijít na to jak ty pole posčítat.
Mám SQL podle vzoru výše uvedeného:
SELECT EXTRACT(YEAR FROM date) AS datum, count(code) pocet from table group by `datum`ORDER BY `date`
Z dotazu si vytvořím array:
$i = 1;
foreach($query as $row) {
  $chart[$i++] = array( 'datum'=>$row["datum"], 'pocet'=>$row["pocet"]);
}
Pole pak vypadá takto:
Array ( [1] => Array ( [datum] => 2013 [pocet] => 6844 ) [2] => Array ( [datum] => 2014 [pocet] => 848 ) [3] => Array ( [datum] => 2015 [pocet] => 1602 ) [4] => Array ( [datum] => 2016 [pocet] => 310 ) ) 

A z pole už si data pro graf vyzobu třeba nějak takto:
foreach($chart as $row1) {
    echo ("['".$row1['datum']."', ".$row1['pocet']."],");
}

No ale pořád mi uniká, jak ty počty mám sčítat ...
Tedy aby
$chart[1]['pocet'] = 6844 
$chart[2]['pocet'] = 7692
$chart[3]['pocet'] = 9294
...
Alphard
Profil
$sum = 0;
foreach($chart as $row1) {
  $sum += $row1['pocet'];
  echo ("['".$row1['datum']."', ".$sum."],");
}
danhill
Profil
Wooooow ... Moooc děkuji :) ... Paráda. Chodí krásně ...

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: