Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP&MySQL päivämäärien järjestämistä

Sivun loppuun

Omasual [29.09.2006 08:53:00]

#

MySQL:ssä tietue "pvm" ja mallia DATE. Kun haen tietoa taulusta ja järjestän päivämäärän mukaan, menee se vuosien mukaan:

06.11.2006
24.12.2004
02.09.1986

Teen eräänlaista muistutinta, joten päivämäärien pitäisi olla oikeassa järjestyksessä. Miten tämä on kannattavinta toteuttaa? Pari tapaa itsellä on mielessä, mutta tuntuvat tosi huonoilta.

Ylläoleva esimerkki tulisi näyttää tältä:
02.09.1986
06.11.2006
24.12.2004

ajv [29.09.2006 08:58:52]

#

Eikös tuo ensimmäinenkin sarja ole ihan oikeassa järjestyksessä, vain väärinpäin? Laitappa se SQL-lause näkyviin, niin näkee suoraan onko siinä jotain kömmähdyksiä (järjestät aliaksen mukaan etkä kentän mukaan?)

Omasual [29.09.2006 09:10:44]

#

Myslihaku näyttää tältä (kyllä, tähti lähtee pois):

$haku = "SELECT * FROM merkkipaivat ORDER BY pvm DESC";

Ja tällä korjataan, ettei pvm ole mallia vvvv-kk-pp:

<? $pvm_show = mysql_result($tulos,$laskuri,"pvm"); echo date("d.m.Y", strtotime($pvm_show)); ?>

Vuosiluvuilla ei listassani ole periaatteessa merkitystä. Haluaisin niin, että seuraavaksi tuleva päivämäärä (esim. syntymäpäivä) näkyisin ensimmäisenä. Vuosilukuja aion mahdollisesti käyttää iän laskuun.

Eli lista pitäisi olla "Jaa, seuraavana on Pekan synttärit. Siitä seuraava onkin näköjään Kallen nimipäivä ja sitten jouluaatto". Vaikea selittää, toivottavasti tajusitte :)

Edit: Kentän/aliaksen mukaan? Nyt meni ohi, vaikeeta on aloittelijalla.

ajv [29.09.2006 09:16:45]

#

Auttaisko ihan tuon järjestyksen kääntäminen (DESC => ASC), muuten en nää tuossa mitään väärää. Oikeaoppisempi esimerkki: ajan voi muotoilla myös tietokannan puolella valmiiksi ja hae mielumminen kenttien nimillä, kuin kaikkia kenttiä (*).

SELECT
   kenttä1,
   kenttä2,
   DATE_FORMAT(pvm, '%d.%m.%Y') AS pv
FROM
   merkkipaivat
ORDER BY
   pvm ASC

Alias... Nyt tuo pv on alias, joka on muodostettu pvm-kentästä. PHP:n puolella sun täytyy viitata nyt pv-kentään. Mutta huomaa, että järjestäminen tapahtuu edelleen pvm-kentän mukaan!

Omasual [29.09.2006 09:29:14]

#

Nyt meni koko koodi hieman rikki, mutta korjataan korjataan. Juu, aion laittaa tähden sijasta kentät, kunhan saa tuota sekamelskaa osittain toimimaan.

Olisiko paha vaihtoehto niin, että käyttäjä syöttää päivän, esim "24.12." ja kenties vuoden "1977" ja nämä laitetaan omiin tietueihinsa esim VARCHARina? PHP voisi vielä kääntää päivämäärän ympäri, jolloin järjestely olisi ehkä helpompaa.

Eli siis ajv, kuvittele ettei noissa mun päivämäärälistoissa ole vuosilukuja, niin huomaat että ne ovat väärässä järjestyksessä :)

ajv [29.09.2006 09:37:16]

#

Omasual kirjoitti:

Eli siis ajv, kuvittele ettei noissa mun päivämäärälistoissa ole vuosilukuja, niin huomaat että ne ovat väärässä järjestyksessä :)

Aivan juu (käy vähän hitailla kierroksilla näin aamusta:), eli tehdään alias, jossa pelkästään kuukaudet ja päivät ja järjestetään sen mukaan:

SELECT
   kenttä1,
   kenttä2,
   DATE_FORMAT(pvm, '%m-%d') AS sort_pvm,
   DATE_FORMAT(pvm, '%d.%m') AS pv
FROM
   merkkipaivat
ORDER BY
   sort_pvm ASC

Ja mitä tuohon päivämäärän tallennukseen tulee, suosittelen kyllä käyttämään tietokannan omia kenttiä, eli ajat aika-tyyppiseen sarakkeeseen eikä tekstikenttään.. Silloin voit käyttää tietokannan omia funktioita ja järjestämiset yms. toimii suoraan ilman virityksiä.

Omasual [29.09.2006 09:42:03]

#

Mainiota, se toimii! Suurkiitokset ajv, meinasin jo turhautua ja tehdä jotenkin rumasti VARCHARilla tms.

Vielä sellaista, mitenhän tuonne saisi väliin tämän päivämäärän? Tai esimerkiksi linkki, "Näytä menneet" ja "Piilota menneet" ?

ajv [29.09.2006 10:02:10]

#

Nyt tulee hatusta koodia

// näytetään vain tulevat syntymäpäivät:
SELECT
   kenttä1,
   kenttä2,
   DATE_FORMAT(pvm, '%m-%d') AS sort_pvm,
   DATE_FORMAT(pvm, '%d.%m') AS pv
FROM
   merkkipaivat
HAVING
   sort_pvm >= DATE_FORMAT( NOW() , '%m-%d' )
ORDER BY
   sort_pvm ASC

Omasual [29.09.2006 10:39:11]

#

ajv, sehän toimii. Kiitos jälleen!

En tiennytkään että myslihaussa on noinkin paljon vaihtoehtoja.


Sivun alkuun

Vastaus

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

Tietoa sivustosta