Elikkä ongelma on se kun tietokannasta tulee tiedot muodossa
2002-07
2003-02
2003-03
2005-04
eli vuosi ja sitten kuukausi, niin miten saan tulosjoukkoon lisättyä tyhjät kuukaudet esim
2002-07
2002-08
2002-09
jne.
2005-04 asti
Pystynkä lisäämään tollasia rivejä tonne väliin jotenkin vai tarviiko php:llä muokata tulos joukko, jos niin miten?
Voi olla jollakin hämärällä tavalla olla mahdollista tehdä tuo jo kannan puolella, mutta henkilökohtaisesti tekisin tuon PHP:n puolella assosiatiivisella taulukolla.
Pistetäänpä vielä päästä heitetty esimerkki tuon taulukon luomisesta:
<?php for($y=2002; $y<=2010; $y++){ for($m=1; $m<=12; $m++){ $taulukko[$y.'-'.sprintf("%02d",$m)] = NULL; //hypätään kuluvan kuukauden kohdalla silmukoista ulos if($y == date('Y') && $m == date('n')) break 2; } } // nyt taulukko näyttää seuraavalta echo '<pre>'; print_r($taulukko); // tämän jälkeen pistät ne kannasta saadut arvot tuohon samaiseen taulukkoon ?>
Edit: korjasin koodia vielä. Tyhmää, kun ei voi nähdä kysymystä samaan aikaan kun siihen on vastaamassa ;(
Riippuu mysql-versiosta mutta union-lauseellahan tuo onnistuu.
http://dev.mysql.com/doc/mysql/en/union.html
jotenkin tyyliin:
select '2004-08' as date
union
select '2004-07' as date
ja sitten vielä ne oikeat vuodet.
Toi ajv:n ehdotus on hyvä mutta en ymmärrä tätä kohtaa
$taulukko[$y.'-'.sprintf("%02d",$m)] = NULL;
mitä tossa oikeastaan tehdään, miten ne menee taulukkoon ja miten saan tulostettua ne sieltä?
kysymys näytti olevan:
MySQL select lauseeseen lisää omia rivejä?
Tuossa kohtaa:
- $y-muuttujasta löytyy sen hetkinen vuosi
- sprintf("%02d",$m) pistää $m-muuttujan eteen 0;n, jos tarvetta (01,02,...,12)
- NULL on solun oletusarvo, eli käytännössä tarkoittaa tyhjää.
Tulostus ihan normaaliin tapaan vaikka foreachilla.
kasetti kirjoitti:
kysymys näytti olevan:
MySQL select lauseeseen lisää omia rivejä?
Ja kysyttiin myös, että joudunko lisäämään PHP:llä rivejä tjsp.
Kyllähän tuolla unionilla voisi ehkä saman saada aikaan, mutta menee mielestäni aikalailla kikkailemiseksi ja en kyllä henkilökohtaisesti edes ymmärrä miten tuo union-lauseella hoidettaisiin.
oukei, mut mites ton taulukon tulostaminen onnistuu? for-lauseella koitin mutta ei onnistunut.
PeeCee kirjoitti:
oukei, mut mites ton taulukon tulostaminen onnistuu? for-lauseella koitin mutta ei onnistunut.
Muuten ihan hyvin mutta itse ongelmaa se ei ratkaissut, eli kun kannasta tulee noi tiedot tollain kuten ekassa viestissä mainitsin niin en saa noita tyhjiä rivejä tonne väleihin.
Onko kannasta tulevilla riveillä jotkut arvot? Eli esim.
2002-07: satoi vettä
Näin olettaisin. Ja jos näin on, niin heität sen kannasta tulevan aika-arvo taulukon tuon juuri tekemäsi taulukon "päälle"
Idea:
Jees nyt ne menee taulukkoon, mutta ei tuu välejä, eli mites noi 2 sun scriptiä yhdistetään jotta saisin halutun lopputuloksen.
No siis ensin teet sen "tyhjän" taulukon ja sen jälkeen täytät sen kannasta tulevilla arvoilla. Mikä tässä tuottaa ongelmia?
Kiitos nyt onnistui, mutta vielä olisi ongelmana se, että haluaisin taulukon olevan muotoa
taulukko[0] taulukko[1] taulukko[2] jne.
eli miten "nimeän" ton taulukon uudelleen?
Eli siis $taulukko[0] = value ?? No tuohan nyt ei ole mahdollista, vai minnes sitten ajattelit laittaa sen 'vvvv-kk' talteen? Nythän tuo taulukko on muotoa $taulukko['vvvv-kk'] = value.
Mihin oikeastaan tarvitset tuollaista tavallista taulukkoa?
niin kun oon luonut sen ja laittanu tiedot niin se on muotoa
$taulukko[haka]'vvvv-kk'[/haka] = value
ja sen jälkeen haluaisin nimetä ne
$taulukko['0'] = value $taulukko['1'] = value
siis tollain, olisi helpompi käsitellä noita ton jälkeen sitten.
Ajat taulukon esim. sort()-funktion läpi, jolloin nuo solujen indexit häviävät/muuttuvat numeerisiksi, mutta samalla taulukko kylläkin järjestyy. Mutta nyt herää kysymys, miksi ylipäätänsä sitten pitää kerätä nuo puuttuvat välit tonne, jos et kerta niillä mitään tee? Vai teetkö niillä jotain jo välissä ja sen jälkeen haluat muuttaa taulukon uuteen muotoon?
Sen verran purkaksi alkaa tuo toteutus mennä, että siihen mitä ikinä haluatkaan noilla taulukoilla tehdä, on varmasti paljon parempikin ratkaisu :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.