Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Päivän mukaan rivin poisto

kettu [04.06.2006 22:58:56]

#

Hei vaan!

Minulla on tapahtumakalenteri, josta pitäisi tulostua ainostaan kuluvan päivän ja tulevan ajan tapahtumat. Tapahtumia ei tietenkään ole listattu järjestykseen tapahtumakalenteriin ja niitä on käyty muokkaamassakin, joten timestampkin aina päivittyy käsittääkseni silloin.

Ongelma on , että kuinka saan vanhat tapahtumat ei-tulostumaan ja siis vain tulevat tapahtumat tulostumaan. Olen kokeillut vaikka mitä, mm. aiemmin täältä saamiani vinkkejä, mutta en ole saanut pelaamaan. Aiempi keskustelu aiheesta on jo ehtinyt vanhentua, mutta löytyy:
https://www.ohjelmointiputka.net/keskustelu/11877-kun-päivä-on-ohi-niin-tieto-pitäisi-saada-pois

Nyt olen kokeillut asiaa täten (vanhassa keskustelussa toinen tapa):

while ($tulos = mysql_fetch_row($kysely))
{
if (date(j.n.Y)>=$tulos[2])
-->//tuo tulos[2] on samassa j.n.Y muodossa
{
print "
<tr>
<td>$tulos[2]</td>
<td><a href=\"tapahtumakalenteri2.php?id=$tulos[0]\">$tulos[3]</a></td>
</tr>
";
}
}

Päivämäärien vertailu tuntuu olevan ongelmallista, vai enkö vain nyt hiffaa jotain?

ajv [04.06.2006 23:22:03]

#

Päivämäärät ovat PHP:ssä ihan tavallisia merkkijonoja, joten et voi verrata niitä noin. Jos kuitenkin haluat tehdä sen PHP:n puolella, niin ratkaisu on verrata niitä päivämääriä standardin mukaisessa muodossa (YYYY-MM-DD, mietippä miksi) strcmp()-funktiolla. Ja se oikea tapa on rajoittaa se tulosjoukko jo tietokantakyselyssä.

"...WHERE DATE_FORMAT(aika, '%Y%m%d') = '".date('Ymd')."'"

Edit: Äh, luulin, että haluat vain kuluvan päivämäärän tiedot.
Tässä ehto, joka hakee tulevat tapahtumat:

...WHERE aika >= NOW()

kettu [05.06.2006 02:57:14]

#

No, olen nyt yrittänyt tässä jo hyvän matkaa yötä ja samalla opiskellut noita päiväys asioita, mutta alkeissa olen ilmeisestikin pysynyt, kun en saa tulostumaan menossa olevaa päivää (tulevat päivät tulostuvat kyllä). Eikö tuo >= ehto pädekään?

Interval-arvojakin olen testaillut, mutta kertokaa nyt ihmeessä mitä ne oikeastaan tarkoittavat?

Sitten ihan outo juttu, taulun eka rivi ei tulostu sitte millään???? Käytän while-silmukkaa kyselyn "vapauttamiseen". Vaikuttaako asiaan?

Näin muunmuassa olen kokeillut:
$kysely = mysql_query("SELECT id_tapahtuma, paivamaara, tapahtumapaiva, tapahtuma, tila FROM tapahtumakalenteri
WHERE DATE(paivamaara) >= DATE(CURDATE()) ORDER BY paivamaara ASC");

Huomenna uusi päivä! :-)

ajv [05.06.2006 09:10:39]

#

No jos tulostuu tulevat, mutta ei tämänpäiväiset, niin laita:

...WHERE aika >= (NOW() - INTERVAL 1 DAY)

Edit: Niin ja mietippä miksi tuo kyselysi ei toimi oikein:

WHERE DATE(paivamaara) >= DATE(CURDATE())

DATE(2005-06-31) => 31
DATE(2006-06-05) => 5

Eli tuon ehtosi mukaan tuo vuoden vanha päivämäärä on vasta tuleva. Kannattaa pitäytyä tietokannan omassa aikaformaatissa noita aikoja vertaillessa, niin ei tule tuollaisia virheitä.

kettu [17.06.2006 22:00:00]

#

Hei!

Olen saanut päiväsysteemit toimimaan kutakuinkin haluamallani tavalla. Tosin vain tuurin kaupalla. Voisiko joku selittää mitä tuo interval käytönnössä tarkoittaa?

Ajv neuvoi myös pitäytymään tietokannan omassa aikaformaatissa aikoja vertaillessa. Eli mikä se oikea on ja mistä se selviää?

Opista olisin kovin kiitollinen. :-)

ajv [19.06.2006 10:22:51]

#

MOT kirjoitti:

interval ['ɪntəvəl] s 1 väli, väliaika the ~s between the births of children ajat lasten syntymien välillä, an ~ of five years viiden vuoden ajanjakso

Eli NOW() - INTERVAL 1 DAY tarkoittaa ajanhetkeä tasan vuorokausi sitten.

Tietokannan omalla formaatilla tarkoitan vain sitä, että se kentän tyyppi johon ajan tallennat on aika. Eli TIMESTAMP, DATETIME, TIME, DATE tmv. Ajan tallentaminen unix-aikaleimana kokonaisluku-kenttään toimii myös aika hyvin, mutta silloin et voi enää käyttää esim. tuota INTERVALia tai DATE_FORMATIA().

kettu [26.06.2006 14:33:42]

#

Hmm... minulla ilmenee edelleenkin ongelmia. Haluaisin, että tapahtumat olisivat esillä siihen päivään asti tapahtumakalenterissa, kunnes kyseinen päivä on ohi. Olen nyt laittanut asian tälläin:

WHERE DATE(paivamaara) >= DATE(NOW() - INTERVAL 19 DAY)

Mutta ongelmana on, että tulossa oleva tapahtuma katoaa jo ennen aikojaan. Olen myös kokeillut ettei interval arvoa olisi, mutta silloinkin tulevaisuudessa lähimpänä oleva tapahtuma ei tulostu. Näin olisi kivempi, ettei tarvitsisi käsin alkaa tekmään muutoksia tietokantaan. Mikä avuksi?

Vastaus

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

Tietoa sivustosta