Moi!
Mulla on päivämäärä mysql-tietokannassa muodossa vvvv-kk-pp. Nyt mun pitäisi hakea aina yhden kuukauden avulla. Kuinka saan tuon kuukauden paloiteltua tuosta irti?
Käytä MySQL:n omaa MONTH()-funktiota
Ei prkl nyt vain onnistu, vaikka on varmaankin helppo..
Mulla siis koodinpätkä:
$input = array( 'Kuka' => $_POST['Kuka'], 'Mita' => $_POST['Mita'], 'Kuukausi' => $_POST['Kuukausi'], 'Tila' => $_POST['Tila'] ); $input = array_filter($input); if( empty($input) ) { die('no input'); } $tmp = array(); foreach( $input as $k => $v ) { $tmp[] = " $k = '$v'"; } $query = "SELECT * from tietokanta WHERE ".join($tmp, ' AND '); echo 'query: ', $query; $result = mysql_query($query);
Tuo Kuukausi-muuttuja lähetetään siis edellisellä sivulla formilla esim. muodossa 05. Miten saan tuohon hakukoodiin lisättyä, että Kuukausi-muuttuja vastaa tietokannassa olevan Lahtopaiva-muuttujan keskimmäistä lukua (yyyy-mm-dd) eli sen pitäisi siis tulostaa ne, joissa kuukausi on sama? Sen jälkeen osaan varmaankin täydentää siihen myös vuoden, koska muutenhan se hakee kaikilta vuosilta.
Taidan taas olla tosi hölmö, mutta jotenkin tässä hakkaan päätä seinään.. Lahopää!!
en tiedä auttaako tämä tieto mutta mysql:n substring funktiolla voi pilkkoa hakutulosta.
SELECT aika FROM tietokanta;
12/05/00
SELECT substring(aika, 4,2) FROM tietokanta;
05
Jos nyt en aivan väärin muista niin tämän pitäisi toimia, lisäsin tuohon koodiisi myös 'mysql_real_escape_string'-funktion (tietoturvasyistä).
$input = array( 'Kuka' => $_POST['Kuka'], 'Mita' => $_POST['Mita'], 'Kuukausi' => $_POST['Kuukausi'], 'Tila' => $_POST['Tila'] ); $input = array_map( 'mysql_real_escape_string', get_magic_quotes_gpc() ? array_map('stripslashes', $input) : $input ); $input = array_filter($input); if( empty($input) ) { die('no input'); } $tmp = array(); foreach( $input as $k => $v ) { switch( $k ) { case 'Kuukausi': $tmp[] = " $k like '%-$v-%'"; // vvvv-kk-pp break; default: $tmp[] = " $k = '$v'"; break; } } $query = "SELECT * from tietokanta WHERE ".join($tmp, ' AND '); echo 'query: ', $query;
edit: Niin no, yllä olevasta linkistä koko homma olisi löytynyt ihan suoraan.
http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html#c5760
Sain toimimaan. ISO KIITOS!!!
Miten saan tämän huomioimaan myös vuoden??
Viittaus on samaan kenttään (Lahtopaiva) ja formilta lähtee muuttuja Lvuosi.
'Lahtopaiva' => $_POST['Lkuukausi'], $_POST['Lvuosi'],
Itse lähtisin tältä pohjalta:
'Lkuukausi' => $_POST['Lkuukausi'], 'Lvuosi' => $_POST['Lvuosi'],
Ja jatkaisin näin:
case 'Lkuukausi': $tmp[] = "MONTH(Lahtopaiva) = '$v'"; break; case 'Lvuosi': $tmp[] = "YEAR(Lahtopaiva) = '$v'"; break; default: $tmp[] = "$k = '$m'"; break;
Toimii MUTTA nyt eivät vain enää muut hakukentät toimi.. Lisäsin siis ederthin kentät (muuta en muuttanut) ja nyt haku toimiikin kuukauden ja vuoden perusteella, mutta kaikki muut kentät jäävät tyhjiksi vaikka niihin jotain laittaisikin.
En ymmärrä...
$input = array( 'Kuka' => $_POST['Kuka'], 'Mita' => $_POST['Mita'], 'Lkuukausi' => $_POST['Lkuukausi'], 'Lvuosi' => $_POST['Lvuosi'], 'Tila' => $_POST['Tila'] ); $input = array_map( 'mysql_real_escape_string', get_magic_quotes_gpc() ? array_map('stripslashes', $input) : $input ); $input = array_filter($input); if( empty($input) ) { die('no input'); } $tmp = array(); foreach( $input as $k => $v ) { switch( $k ) { case 'Lkuukausi': $tmp[] = "MONTH(Lahtopaiva) = '$v'"; break; case 'Lvuosi': $tmp[] = "YEAR(Lahtopaiva) = '$v'"; break; default: $tmp[] = "$k = '$m'"; break; } } $query = "SELECT * from tietokanta WHERE ".join($tmp, ' AND ');
Aihe on jo aika vanha, joten et voi enää vastata siihen.