Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL select lauseeseen lisää omia rivejä?

Sivun loppuun

PeeCee [11.04.2005 08:10:42]

#

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?

ajv [11.04.2005 09:07:24]

#

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

kasetti [11.04.2005 09:22:45]

#

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.

PeeCee [11.04.2005 09:52:18]

#

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

kasetti [11.04.2005 09:56:22]

#

kysymys näytti olevan:

MySQL select lauseeseen lisää omia rivejä?

ajv [11.04.2005 10:00:38]

#

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.

PeeCee [11.04.2005 10:09:10]

#

oukei, mut mites ton taulukon tulostaminen onnistuu? for-lauseella koitin mutta ei onnistunut.

ajv [11.04.2005 10:11:56]

#

PeeCee kirjoitti:

oukei, mut mites ton taulukon tulostaminen onnistuu? for-lauseella koitin mutta ei onnistunut.

<?php
foreach($taulukko as $kuukausi => $arvo){
   echo $kuukausi.": ".$arvo."<br />";
}
?>

PeeCee [11.04.2005 11:19:47]

#

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.

ajv [11.04.2005 11:28:30]

#

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:

<?php
//oletan, että käytössä on MySQL
$result = mysql_query("SELECT aika, arvo FROM...");
while($row = mysql_fetch_assoc($result)){
   $taulukko[$row['aika']] = $row['arvo'];
}
echo '<pre>';
print_r($taulukko);
?>

PeeCee [11.04.2005 11:39:10]

#

Jees nyt ne menee taulukkoon, mutta ei tuu välejä, eli mites noi 2 sun scriptiä yhdistetään jotta saisin halutun lopputuloksen.

ajv [11.04.2005 12:19:21]

#

No siis ensin teet sen "tyhjän" taulukon ja sen jälkeen täytät sen kannasta tulevilla arvoilla. Mikä tässä tuottaa ongelmia?

PeeCee [11.04.2005 12:54:18]

#

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?

ajv [11.04.2005 13:06:29]

#

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?

PeeCee [11.04.2005 13:13:57]

#

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.

ajv [11.04.2005 14:17:24]

#

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


Sivun alkuun

Vastaus

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

Tietoa sivustosta