Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Päivämäärästä kuukausi ulos

Sivun loppuun

Kurkku [21.05.2005 08:07:21]

#

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?

ajv [21.05.2005 08:40:28]

#

Käytä MySQL:n omaa MONTH()-funktiota

Kurkku [21.05.2005 20:24:57]

#

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ää!!

kasetti [21.05.2005 21:28:54]

#

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

folio [21.05.2005 21:52:58]

#

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

Kurkku [22.05.2005 13:33:18]

#

Sain toimimaan. ISO KIITOS!!!

Kurkku [22.05.2005 15:41:05]

#

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'],
$tmp = array();

foreach( $input as $k => $m )
{
  switch( $k )
  {
    case 'Lahtopaiva':
      $tmp[] = " $k like '%-$m-%'";  // vvvv-kk-pp
      break;
    default:
      $tmp[] = " $k = '$m'";
      break;
  }
}

folio [23.05.2005 15:42:24]

#

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;

Kurkku [23.05.2005 20:15:58]

#

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 ');

Sivun alkuun

Vastaus

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

Tietoa sivustosta