Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP ja MySQL haun lajittelu vuoden mukaan

laurii [19.10.2010 10:43:17]

#

Ongelmani on seuraavanlainen, yritän tehdä mysql hakua jossa saisin lajiteltua niin että haettavan kohteen vuosi näkyisi vain ensimmäisessä eli ei kaikissa, ja sittenkun vuosi vaihtuu seuraavaan se näkyisi taas vain ensimmäisessä.

<?php

$sqlw = mysql_query("SELECT id,otsikko,vuosi,tyot,osoite FROM valvontak ORDER by vuosi DESC"); }
while (list($id, $otsikko, $vuosi, $tyot, $osoite) = mysql_fetch_row($sqlw)) {   echo "

			<div style='margin-top:3px;height:30px;'>
              ".$otsikko."<div style='width:230px;margin-top:0; height:25px;float:right;'>
			".$tyot."</div><br/><div style='font-size:11px;height:10px;margin-top:2px;margin-left:5px;'>".$osoite."</div></div>

				<div style='border-bottom:1px solid #B9B9B9;width:95%;height:5px;'></div>
				";

?>

Macro [19.10.2010 10:49:42]

#

Luo jokin apumuuttuja, vaikka $vanha_vuosi. Sijoita siihen joka kierroksen lopussa ko. kierroksen $vuosi-muuttujan sisältö. Tarkista silmukan alussa, onko $vuosi sama kuin $vuosi_vanha ja määrittele sillä onko $vuosi tulostettava vai ei.

<?php

$sqlw = mysql_query("SELECT id,otsikko,vuosi,tyot,osoite FROM valvontak ORDER by vuosi DESC");
$vanha_vuosi = 0;

while (list($id, $otsikko, $vuosi, $tyot, $osoite) = mysql_fetch_row($sqlw)) {
   if($vuosi != $vanha_vuosi) {
       echo $vuosi;
   }

   $vanha_vuosi = $vuosi;

   echo "

            <div style='margin-top:3px;height:30px;'>
              ".$otsikko."<div style='width:230px;margin-top:0; height:25px;float:right;'>
            ".$tyot."</div><br/><div style='font-size:11px;height:10px;margin-top:2px;margin-left:5px;'>".$osoite."</div></div>

                <div style='border-bottom:1px solid #B9B9B9;width:95%;height:5px;'></div>
                ";

?>

laurii [19.10.2010 10:53:26]

#

Kiitos, empä tuota olisi itse ihan heti keksinytkään!

makumaku [19.10.2010 15:17:16]

#

Jos tuota haluaa vielä optimoida, niin sijoittaa tuon muuttujan $vanha_vuosi käpistelyn iffin sisään. Jos vanha vuosi on sama kuin vuosi niin ihan turhaan sitä silloin käsittelee. Vaikka käytännössä tällä ei ole varmaan yhtään mitään merkistystä, mutta kuitenkin...

while (list($id, $otsikko, $vuosi, $tyot, $osoite) = mysql_fetch_row($sqlw)) {
   if($vuosi != $vanha_vuosi) {
       echo $vuosi;
       $vanha_vuosi = $vuosi;
   }
   echo ...
}

Mod. lisäsi kooditagit

Metabolix [19.10.2010 17:29:50]

#

Monissa tapauksissa yksinkertaisempi vaihtoehto on kerätä tulokset taulukkoon vuoden mukaan:

$tulokset = array();
while (...) {
    $tulokset[$vuosi][] = $tulos;
}

foreach ($tulokset as $vuosi => $vuoden_tulokset) {
  echo "Vuosi $vuosi:\n";
  foreach ($vuoden_tulokset as $tulos) {
    echo "- Tulos: $tulos\n";
  }
}

Vastaus

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

Tietoa sivustosta