Mitenkä voisin tarkistaa melko joustavan hakuehdon, jolla käyttäjät voisivat hakea tietokannasta tietoa päivämäärän mukaan?
Haun pitäisi toimia niin, että käyttäjä voivat syöttää hakuruutuun vaikka vuoden(vvvv), vuosivälin(vvvv-vvvv), päivämäärän(pp.kk.vvvv-pp.kk.vvvv) tai päivämäärävälin(pp.kk.vvvv-pp.kk.vvvv).
Osaako MySQL-tietokanta ihan suoraan tuossa muodossa hakea tavaraa, jos laitan vain, datetimekenttä = '$hakuehto' jne.?
Lisäys
Testailin vähän nyt hakuja ja ei tuo MySQL oikein hakenut mitään, ainakaan tällä ehdolla vaikka pitäisi tietokannasta kyllä löytyä tietoa.
SELECT * FROM taulu WHERE aika > '15.1.2006' AND aika < '17.3.2008'
Ei osaa suoraan noita välejä, sun tarttee laittaa sinne vertailuoperaatiot väliin. Teet kaksi teksikenttää ja sitten tarkistat että jos toista ei ole täytetty, niin silloin se ehto jää pois. Tai näin itse tuollaisen toteutin. Muuten MySQL taitaa osata hakea datetime-kentästä vuoden(vvvv) perusteella. Kokeilemallahan tuo selviää.
Lisäys lisäykseen:
SQL-kyselyssä aika pitää olla muodossa vvvv-kk-pp.
Hmm... jotain tuollaista ajattelinkin, että kaksi kenttää olisi hyvä olla. Eli pitää sitten varmaan muuntaa käyttäjän antama syöte tuohon SQL:n muotoon, kun on se käyttäjälle mukavempi kirjoitella tuolleensa niinkuin ensimmäisessä viestissä kerroin.
No joo... Ite koen käyttäjänä paljon mielekkäämpänä sen, että tekstikentän vieressä kerrotaan missä muodossa aika tulee olla. Se on minusta ihan sama kirjoitanko sen muodossa vvvv-kk-pp vai pp.kk.vvvv, kunhan ei tarvitse arvailla.
Kyllä se luonnollisempaa ainakin itselle on kirjoittaa muodossa 7.8.2007 kuin 2007-08-07 (toki seloste käytetystä formaatista pitää kuitenkin antaa käyttäjälle ohjeistuksena)... MySQL:ssä voit muuttaa sen ajan mistä tahansa formaatista SQL:n datetime muotoon STR_TO_DATE-funktiolla:
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date
Jos tietää että kaikki sivuston käyttäjät ovat suomalaisia, niin sitten kannattaa toki käyttää tuota p.k.vvvv muotoa, mutta esimerkiksi ruotsissa käytetään ihan vakiona tuota ISO-standardin mukaista muotoa vvvv-kk-pp.
Katsokaapa muuten huviksenne kauppojen kuitteja. Itse olen nähnyt kaikki muita mahdollisia järjestyksiä paitsi sellaista jossa vuosiluku olisi keskellä. Erityisen riemastuttavaa katsella tällaisia keskikesän kuitteja joskus vuoden päästä ja miettiä mikä mahtaa olla todellinen päivä kun kuitissa lukee 07-06-08. Olen nähnyt jopa suomalaisen kaupan kassakoneen kertovan kuitissa jotain tyyliin 07-Aug-11.
Yksi ratkaisu on pyytää päivämäärä kolmen alasvetovalikon (select) avulla, joista yhdellä annetaan päivä, toisella kuukausi ja kolmannella vuosi. Tämä on toki hieman vaivalloista käyttäjälle, mutta ainakin päivämäärä tulee luultavasti oikein.
Aihe on jo aika vanha, joten et voi enää vastata siihen.