Avatar billede nemlig Professor
09. august 2008 - 23:57 Der er 9 kommentarer og
1 løsning

Udtræk af datoer fra Mysql og sorter pr måned

Hej. Jeg har en MySql-tabel, hvorfra jeg skal lave et udtræk til en kalenderliste.
Tabellen indeholder en række poster med begivenheder på bestemte datoer - altså  en startdato og en beskrivelse.

Jeg laver derfor udtrækket sådan her:
$sql = "SELECT startdato,beskrivelse FROM kalender ORDER by startdato";
$res = database($sql);

Og hvis jeg bare skulle liste begivenhederne i datoorden, ville jeg gøre sådan her:

echo "<table>";
while($row = mysql_fetch_array($res))
{
echo "<tr><td>".$row['startdato']."</td><td>".$row['beskrivelse']."</td></tr>";
}
echo "</table>";

Udfordringen er, at jeg gerne vil have månedsnavnet til at stå først, inden datoer og beskrivelser listes. Sådan her:

August
2008-08-15  Cykeltur
2008-08-24  Gåtur
September
2008-09-04  Flyvetur
November
2008-11-23  Sovetur

Nogen der kan bidrage med noget hjælp?
Avatar billede janpolsen Nybegynder
10. august 2008 - 00:20 #1
Virker følgende?:

$arrm = array(
    1 => 'Januar',
    2 => 'Februar',
    3 => 'Marts',
    4 => 'April',
    5 => 'Maj',
    6 => 'Juni',
    7 => 'Juli',
    8 => 'August',
    9 => 'September',
  10 => 'Oktober',
  11 => 'November',
  12 => 'December',
}

echo "<table>";
while($row = mysql_fetch_assoc($res)) {
    $m = date('n', strtotime($row['startdato']));
    if ($old_month != $m) {
      echo $arrm[$m]."<br/>";
      $old_month = $m;
    }
    echo "<tr><td>".$row['startdato']."</td><td>".$row['beskrivelse']."</td></tr>";
}
echo "</table>";
Avatar billede nemlig Professor
10. august 2008 - 00:37 #2
Ikke helt. Den lister først månederne, og derefter datoerne.
Det er dog de korrekte måneder, som listes - alså kun måneder, hvor der er en startdato.
Jeg går ud fra at Array definationen skal slutte med "parantes slut" og ikke "højre-tuborg".
Avatar billede nemlig Professor
10. august 2008 - 00:55 #3
aarrghhh - sorry - min fejl. Det kører.
Jeg havde ikke fået sat "<tr><td colspan=2> foran "$arrm[$m]" og efter.

Nu kører det korrekt med denne kode:

$arrm = array(
    1 => 'Januar',
    2 => 'Februar',
    3 => 'Marts',
    4 => 'April',
    5 => 'Maj',
    6 => 'Juni',
    7 => 'Juli',
    8 => 'August',
    9 => 'September',
  10 => 'Oktober',
  11 => 'November',
  12 => 'December',
);

echo "<table>";
while($row = mysql_fetch_assoc($res)) {
    $m = date('n', strtotime($row['startdato']));

    if ($old_month != $m) {
      echo "<tr><td colspan=2>".$arrm[$m]."</td></tr>";
      $old_month = $m;
    }
    echo "<tr><td>".$row['startdato']."</td><td>".$row['beskrivelse']."</td></tr>";
}
echo "</table>";

Tak for hjælpen - send venligst et svar.
Avatar billede olebole Juniormester
10. august 2008 - 13:35 #4
<ole>

Standardløsningen ser sådan ud:

$arrm = array("januar", "februar", "marts", "april", "maj", "juni", "juli", "august", "september", "oktober", "november", "december");

- og:
    echo "<tr><td colspan=2>".$arrm[$m-1]."</td></tr>";

/mvh
</bole>
Avatar billede janpolsen Nybegynder
10. august 2008 - 22:12 #5
@olebole: Der kan man bare se - jeg viste slet ikke der var standardløsninger for sådan noget :p.

@nemlig: Men ja, som du fandt ud af, så skulle det ikke være en tuborklamme, men en slutparentes... og jeg glemte at få månedsnavnet ind i tabel'en, men det har du også fint fundet ud af :).
Avatar billede olebole Juniormester
10. august 2008 - 22:48 #6
Hvis du prøver at trawle gamle tråde igennem her og i andre PHP-fora, vil du se, at det er løsningen, der bliver valgt i 99% af tilfældene ... det kan man vel godt kalde en 'standardløsning' uden at fornærme ret mange  ;o)
Avatar billede nemlig Professor
10. august 2008 - 22:52 #7
Tak for hjælpen.
Standardløsning eller ej? - Det virker i hvert fald efter hensigten - omend olebole's forslag virker mere enkelt.
Avatar billede janpolsen Nybegynder
10. august 2008 - 23:19 #8
Én ting er sikkert og det er, at der ikke findes standardløsninger i PHP. Vi har hver vores kodestil og favoritfunktioner, som vi holder os til.

Tværtimod HVIS der skulle tales om en standardløsning, så ville jeg mere hælde til den korteste og mest enkle løsning på problemet og det vil i dette tilfælde nok være noget med setlocal() og strftime() og dermed helt undlade arrayet samt tage højde for i18n.
Avatar billede olebole Juniormester
10. august 2008 - 23:47 #9
En anden ting, der er ligeså sikkert: Jeg er stødt på flere Ekeperten-brugere, der magter at læse og forstå et indlæg, skrevet på ganske alm. dansk  :oP
Avatar billede janpolsen Nybegynder
11. august 2008 - 02:02 #10
Jeg skal ikke udtale mig yderligere om, hvorvidt jeg magtede at læse eller forstod dette indlæg, men et eller andet må jeg da ha' gjort rigtigt siden jeg fik nogle point her... eod herfra...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester