Mites ihmeessä sasin kannasta tulostettua google chartsiin dataa?
Google vaatii taulukon muodossa
x y z
2 3 6
5 2 1
1 4 2
ja kannassahan nämä on
x 2
y 3
y 2
x 5
z 6
x 1
jne
Esimerkki
https://developers.google.com/chart/interactive/
SELECT x, y, z FROM your_table GROUP BY x, y, z
Veikkaan että kannassa on vielä muutakin tietoa kuin kysymyksessä esitetyt. Tuollaisilla tiedoilla kun ei oikeastaan tee mitään.
Jos katsotaan vaikka tuota esimerkkiviivagraafia, niin siinä on Y-akselilla arvo ja X-akselilla vuodet. Nyt tuossa esimerkkidatassa ei ole vuosia tai muuta vastaavaa tietoa, joka kertoisi mikä on noille oikea järjestys ja mitkä x, y ja z kuuluvat yhteen eli ovat esim. saman vuoden tiedot.
Tietokannasta tiedot saattavat tulla missä tahansa järjestyksessä, jos kyselyssä ei ole ORDER BY -osiota.
Grez kirjoitti:
Veikkaan että kannassa on vielä muutakin tietoa kuin kysymyksessä esitetyt. Tuollaisilla tiedoilla kun ei oikeastaan tee mitään.
Luultavasti kyllä, mutta kysymyksessä ei tarkemmin spesifioitu taulun skeemaa, joten vastasin siihen, mitä kysyttiin.
Triton kirjoitti:
joten vastasin siihen, mitä kysyttiin.
Kommenttini ei kylläkään ollut sinun viestiisi.
Mutta nyt kun katsoin vastaustasi, niin en oikein ymmärrä miten tuo kysely voisi edes toimia. Kannassahan nimenomaan ei kysymyksen mukaan ollut sarakkeita x, y ja z. Jos olisi, niin silloinhan tiedot olisi suoraan "Googlen vaatimassa" muodossa.
Lähinnä haen tuota tulostusta tuohon muotoon. sen voi suoraan stringinä sitten siirtää googlen functiolla charttiin.
taulukkoon tulee päivämäärä yhdeksi akseliksi..
siis miten saisin sivuille vaikka tulostettua tuollaiseen taulukkoon?
Tokihan se olisi parasta jos saisi suoraan muuttujana (array)
Itse hakisin kannasta ihan vaan suoraan ja järjestäisin sitten koodin puolella.
Ei ollut puhetta kielestä tai kannasta tai muustakaan mitä käytät, mutta jos itse tekisin sen vaikka C#:lla ja EntityFrameworkilla niin koodi näyttäisi suunnilleen tältä:
static void Esimerkki() { var db = new CreepyTestEntities(); var result = new List<List<object>>(); result.Add(new List<object>() { "Date", "X", "Y", "Z" }); result.AddRange( db.creepy .GroupBy(c => c.Date) .Select(g => row(g)) ); //Nyt tulos on result-nimisessä muuttujassa jonka voi heittää esim. JSONiksi. } private static List<object> row(IGrouping<DateTime, creepy> g) { var res = new List<object>() { g.Key }; res.AddRange(g.OrderBy(c => c.Class).Select(c => (object)c.Value)); return res; }
creepy kirjoitti:
ja kannassahan nämä on
x 2
y 3
y 2
x 5
z 6
x 1
jne
Käsitinkö oikein että sinulla nuo on kannassa tietyissä nimeltä mainitsemattomissa sarakkeissa.
Pikaisen extension tauluun tekemäni kyselyn pohjalta taulukon rakenne muuttuisi näin:
$result = $query->rows; $array = array(); foreach($result as $arr){ if(!isset($array[$arr['type']])){ $array[$arr['type']] = array(); } array_push($array[$arr['type']] ,$arr['code']); }
Sinulla tässä muuttunee tuo ylin rivi hiukan, koska minulla se on käytössäni olevan luokan mukainen. Lopputulos lienee kuitenkin sinulla sama.
Minulla tuo järjestää esim. tähän tapaan(print_r):
Kyllä, tarkemmin taulu voisi olla näin
id pvm nimi piste
1 2012 x 3
2 2012 y 2
3 2013 y 4
jne
ja php:llä tarvisi näitä pyöritellä
creepy kirjoitti:
Kyllä, tarkemmin taulu voisi olla näin
id pvm nimi piste
1 2012 x 3
2 2012 y 2
3 2013 y 4
jneja php:llä tarvisi näitä pyöritellä
Eikö sinulla jo ole kannassakin noin? Kun olet tuohon ottanut nuo x y ja z esimerkiksi, onko tarkoitus että taulukon avaimiksi tulisikin nimet?
Jos nyt ihan alkuperäisen kysymyksen mukaan mennään, tämä voisi toimia:
<?php $t = array(); $x = $y = $z = 0; foreach (hae_lista("SELECT kirjain, numero FROM taulu") as $rivi) { $k = $rivi["kirjain"]; if (empty($t[$$k])) { $t[$$k] = (object) array("x" => "", "y" => "", "z" => ""); } $t[$$k]->$k = $rivi["numero"]; $$k += 1; } function f($x, $y, $z) { return "{$x}\t{$y}\t{$z}\n"; } $str = f("x", "y", "z"); foreach ($t as $rivi) { $str .= f($rivi->x, $rivi->y, $rivi->z); } echo $str;
Jos kuitenkin on tarkoitus huomioida myös nuo päivämäärät, jotka myöhemmässä viestissä mainitaan, pitää poistaa muuttujat $x, $y ja $z ja vaihtaa $$k:n tilalle $pvm ja tietenkin hakea se tietokannasta.
id pvm nimi piste 1 2012 x 3 2 2012 y 2 3 2013 y 4
pistemies kirjoitti:
creepy kirjoitti:
Kyllä, tarkemmin taulu voisi olla näin
id pvm nimi piste
1 2012 x 3
2 2012 y 2
3 2013 y 4
4 2013 z 2
5 2013 x 4
jneja php:llä tarvisi näitä pyöritellä
Eikö sinulla jo ole kannassakin noin? Kun olet tuohon ottanut nuo x y ja z esimerkiksi, onko tarkoitus että taulukon avaimiksi tulisikin nimet?
jep, kannassa siis noin eli tuosta tälläiseksi tauluksi
koodi kirjoitti:
pvm x y z
2012 3 2 2
2012 4 4 ....
Kiitoksia jo tulleista vastauksista, en ole vielä päässyt koodin pariin niitä pureksimaan
Joko tästä arraysta onnistuisit tulostamaan tuohon googlen koodiin:
$array = array(); foreach($result as $arr){ if(!isset($array[$arr['nimi']])){ $array[$arr['nimi']] = array(); $array[$arr['nimi']]['pvm'] = array(); $array[$arr['nimi']]['piste'] = array(); } array_push($array[$arr['nimi']]['pvm'] ,$arr['pvm']); array_push($array[$arr['nimi']]['piste'] ,$arr['piste']); }
Skriptin tulos:
Kiitoksia!
Tuo arrayn käsittely on jotenki ollu aina hankalaa minulle.
creepy kirjoitti:
pvm x y z
2012 3 2 2
2012 4 4 ....
Entä miten tuo pvm ja sen jälkeiset pisteet? Kannassa kunkin pisteet ovat omalla rivillään... pitääkö tuossa päivämäärän mukaan lajitella samalle riville kaikkien "nimien" pisteet?
Aihe on jo aika vanha, joten et voi enää vastata siihen.