[PHP] MySQL date sorteren op maanden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een MySQL tabel met ongeveer 10 datums erin. Deze wisselen steeds en zijn dus niet altijd in dezelfde maand. Ook zitten ze niet in hetzelfde jaar.

Nu wil ik ze graag zo op de pagina showen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[tabel]
  [titel]Juli 2004[/titel]
  [datum]2004-06-12[/datum]
  [datum]2004-06-13[/datum]
  [datum]2004-06-26[/datum]
[/tabel]

[tabel]
  [titel]Januari 2005[/titel]
  [datum]2005-01-11[/datum]
[/tabel]

[tabel]
  [titel]Juli 2005[/titel]
  [datum]2005-06-06[/datum]
[/tabel]

Let op: ik heb de tabellen een beetje pseudo geschreven, dan kunnen jullie zien dat ik het per maand gesorteerd wil hebben, juli 2004 en juli 2005 moeten ook apart.

Die tabellen maak ik gewoon met een while lus.. maar hoe los ik dit op?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Zelf zou ik een ORDER BY op datum doen en in de PHP de juiste formatting doen (controleren of de huidige maand dezelfde is als de vorige maand in de array)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
gorgi_19 schreef op 10 april 2004 @ 18:34:
Zelf zou ik een ORDER BY op datum doen en in de PHP de juiste formatting doen (controleren of de huidige maand dezelfde is als de vorige maand in de array)
Dus als ik 2004-06-12 heb de 06 eruit exploden en in een array zetten, als de volgende datum in de array voorkomt in de zelfde categorie anders in een nieuwe? :?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 10 april 2004 @ 18:39:
[...]


Dus als ik 2004-06-12 heb de 06 eruit exploden en in een array zetten, als de volgende datum in de array voorkomt in de zelfde categorie anders in een nieuwe? :?
Nee, ik neem aan dat je het datum type DateTime oid in MySQl gebruikt. PHP kent ws wel iets vergelijkbaars als een Month en Year functie om de maand / jaar van een datum te krijgen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
gorgi_19 schreef op 10 april 2004 @ 18:43:
[...]

Nee, ik neem aan dat je het datum type DateTime oid in MySQl gebruikt. PHP kent ws wel iets vergelijkbaars als een Month en Year functie om de maand / jaar van een datum te krijgen.
Ja ik gebruik een date type als veld. Maar ik zit met een probleem hoe ik dit precies moet aanpakken.

Als ik ORDER BY datum ASC draai komen ze wel in de goede volgorde alleen nu wil ik dus nog op maand splitten... Op dat punt loop ik vast...

code:
1
2
3
4
5
6
7
$tpl->newBlock("maand");
  $tpl->assign("maand", $maand");
  $tpl->assign("datum", $datum");

$tpl->newBlock("maand");
  $tpl->assign("maand", $maand");
  $tpl->assign("datum", $datum");

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het probleem opgelost :P

Het is denk ik niet op de efficienste manier maar het werkt. Iemand nog suggesties of is het goed :P

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$sQuery = mysql_query("SELECT id, activiteit AS naam, plaats, date_format(datum,'%d-%m-%Y') AS data FROM ".$mysql['table_prefix']."agenda WHERE actief='1' AND (website='1' OR website='3') ORDER BY datum ASC", $sql) or die("<strong>Error:</strong>\n<br />&nbsp;&nbsp;".mysql_error());
if(mysql_num_rows($sQuery) >= 1)
{
    $maanden = array("Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December");
    $maand = array();
    while($data = mysql_fetch_assoc($sQuery))
    {
        $d_maand = explode("-", $data['data']);
        if(!in_array($d_maand[2]."-".ltrim($d_maand[1], "0"), $maand))
        {
            array_push($maand, $d_maand[2]."-".ltrim($d_maand[1], "0"));
            $tpl->newBlock("maand");
            if($d_maand[2] == date("Y"))
                $tpl->assign("maand.maand", $maanden[ltrim($d_maand[1], "0")-1]);
            else
                $tpl->assign("maand.maand", $maanden[ltrim($d_maand[1], "0")-1]." ".$d_maand[2]);
        }
        
        $tpl->newBlock("evenement");
        $tpl->assign( Array("evenement.id"      => $data['id'],
                            "evenement.naam"    => ucfirst(trim(stripslashes($data['naam']))),
                            "evenement.plaats"  => ucfirst(trim(stripslashes($data['plaats']))),
                            "evenement.datum"   => $data['data']));         
    }
}
?>

[ Voor 128% gewijzigd door Verwijderd op 10-04-2004 19:56 ]

Pagina: 1