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
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?)
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.
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!
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ä :)
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ä.
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" ?
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
ajv, sehän toimii. Kiitos jälleen!
En tiennytkään että myslihaussa on noinkin paljon vaihtoehtoja.
Aihe on jo aika vanha, joten et voi enää vastata siihen.