Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kannasta google charts:iin?

Sivun loppuun

creepy [02.10.2013 08:14:49]

#

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/docs/gallery/linechart

Triton [02.10.2013 08:44:54]

#

SELECT x, y, z FROM your_table GROUP BY x, y, z

Grez [02.10.2013 10:09:33]

#

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.

Triton [02.10.2013 10:24:04]

#

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.

Grez [02.10.2013 10:52:05]

#

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.

creepy [02.10.2013 11:25:56]

#

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)

Grez [02.10.2013 11:36:32]

#

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;
}

pistemies [02.10.2013 11:51:11]

#

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):

Array
(
    [payment] => Array
        (
            [0] => cod
            [1] => free_checkout
        )

    [total] => Array
        (
            [0] => shipping
            [1] => sub_total
            [2] => tax
            [3] => total
            [4] => credit
            [5] => handling
            [6] => low_order_fee
            [7] => coupon
            [8] => reward
            [9] => voucher
        )
)

creepy [02.10.2013 12:02:15]

#

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ä

pistemies [02.10.2013 12:18:29]

#

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
jne

ja 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?

Metabolix [02.10.2013 12:52:33]

#

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.

creepy [02.10.2013 13:07:37]

#

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
jne

ja 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

pistemies [02.10.2013 13:59:05]

#

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:

Array
(
    [Pekka] => Array
        (
            [pvm] => Array
                (
                    [0] => 2013
                    [1] => 2012
                )

            [piste] => Array
                (
                    [0] => 5
                    [1] => 4
                )

        )

    [Matti] => Array
        (
            [pvm] => Array
                (
                    [0] => 2012
                    [1] => 2011
                )

            [piste] => Array
                (
                    [0] => 7
                    [1] => 3
                )

        )

)

creepy [02.10.2013 14:50:58]

#

Kiitoksia!

Tuo arrayn käsittely on jotenki ollu aina hankalaa minulle.

pistemies [02.10.2013 18:41:33]

#

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?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta