Sorteren datum php

Pagina: 1
Acties:
  • 156 views sinds 30-01-2008
  • Reageer

Onderwerpen


Verwijderd

Topicstarter
Ik ben nog niet zo heel lang bezig met php en heb (wellicht daardoor) een probleempje met het op de juiste manier weergeven van dingen uit een database. Mensen kunnen datum + item dat daarbij hoort toevoegen aan de database. Ze vullen de dag van de maand in (1 t/m 31) + maand (jan t/m dec) + het item in. Nu wil ik dit zo weergeven dat alle items na elkaar worden weergeven in de juiste maandvolgorde en binnen de maand de juiste dagvolgorde. Heb dit als volgt gedaan.

$sql = "SELECT * FROM agenda WHERE jaar='2007' ORDER by maand";
$resultaat = mysql_query($sql);
while ($rij = mysql_fetch_array($resultaat)) {
$datum = $rij["datum"];
$itemlang = $rij["itemlang"];
$jaar = $rij["jaar"];
$maand = $rij["maand"];
if ($maand=="01" ){echo "$datum Januari: $itemlang";} else {echo "<br />";}
if ($maand=="02" ){echo "$datum Februari: $itemlang";} else {echo "";}
if ($maand=="03" ){echo "$datum Maart: $itemlang";} else {echo "";}
if ($maand=="04" ){echo "$datum April: $itemlang";} else {echo "";}
if ($maand=="05" ){echo "$datum Mei: $itemlang";} else {echo "";}
if ($maand=="06" ){echo "$datum Juni: $itemlang";} else {echo "";}
if ($maand=="07" ){echo "$datum Juli: $itemlang";} else {echo "";}
if ($maand=="08" ){echo "$datum Augustus: $itemlang";} else {echo "";}
if ($maand=="09" ){echo "$datum September: $itemlang";} else {echo "";}
if ($maand=="10" ){echo "$datum Oktober: $itemlang";} else {echo "";}
if ($maand=="11" ){echo "$datum November: $itemlang";} else {echo "";}
if ($maand=="12" ){echo "$datum December: $itemlang";} else {echo "";}
echo "<br />";
}

Hij gieft hierna wel de maanden in de juiste volgorde weer (door ORDER by maand) maar binnen de maanden geeft hij de dagen weer via de laatst toegevoegde. ORDER by datum (wat de dag is) lost probleem ook niet op omdat alle dagen in volgerde worden gezet maar de maanden door elkaar staan. Weet iemand hier een oplossing voor, of een suggestie zodat ik zelf verder kan?

  • LegacyCode
  • Registratie: Maart 2002
  • Laatst online: 09:56

LegacyCode

De crack van de division

Met het volgende sorteer je eerst per maand daarna per dag
code:
1
ORDER BY maand, datum

Denk dat het dat is wat je zoekt

legacycode.net


  • mithras
  • Registratie: Maart 2003
  • Niet online
Ik heb zo'n idee dat je dag, maand en jaar als string/integer in de database hebt staan. Je hebt echter ook speciale date and time fields, zie daarvoor ook de MySQL reference. Je kunt gewoon een sort by date doen waarbij date een date/datetime veld is.

Je kan vervolgens met date_format() de juiste onderdelen van je datum selecteren.

Verwijderd

Topicstarter
LegacyCode schreef op zaterdag 29 september 2007 @ 20:52:
Met het volgende sorteer je eerst per maand daarna per dag
code:
1
ORDER BY maand, datum

Denk dat het dat is wat je zoekt
Dat werkt niet omdat hij dan toch pas op datum gaat selecteren wanneer het getal hetzelfde is als de maand.

Ik ga proberen aan de slag te gaan met de date en time fields

[ Voor 8% gewijzigd door Verwijderd op 29-09-2007 20:58 ]


  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
Heb een aantal opmerkingen bij deze code.
PHP:
1
2
3
4
$datum = $rij["datum"];
$itemlang = $rij["itemlang"];
$jaar = $rij["jaar"];
$maand = $rij["maand"];
Nu doe je dus eigenlijk dubbel zoveel werk. Niet echt nodig imo.
PHP:
1
else {echo "";}
Zonder de else doet het precies hetzelfde, dus vrij nutteloos.

Voor de rest zou je je kunnen verdiepen in UNIX timestamps. Die kun je namelijk met strftime(); omzetten naar een door een mensen te lezen formaat en is ook nog eens gemakkelijk te ordenen in bijv. MySQL.

[ Voor 16% gewijzigd door Bitage op 29-09-2007 20:59 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zaterdag 29 september 2007 @ 20:56:
[...]


Dat werkt niet omdat hij dan toch pas op datum gaat selecteren wanneer het getal hetzelfde is als de maand.
Onzin, maar datum/tijd velden (DATETIME bijvoorbeeld) zijn toch echt een stuk praktischer. Dan kun je namelijk gewoon een ORDER BY `datumveld` doen.

Verder mag je je inderdaad wel even verdiepen in PHP, want een lege string echoën in elke else is niet echt handig coden. Daarnaast kan je code, zelfs zonder gebruik te maken van andere principes, veel korter:
PHP:
1
2
3
4
5
6
7
8
9
10
$sql = "SELECT * FROM agenda WHERE jaar='2007' ORDER by maand";
$resultaat = mysql_query($sql);
while ($rij = mysql_fetch_array($resultaat)) {
$datum = $rij["datum"];
$itemlang = $rij["itemlang"];
$jaar = $rij["jaar"];
$maand = $rij["maand"];
$maandnamen = array("Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December");
echo $datum . " " . $maandnamen[$maand - 1] . ": " . $itemlang . "<br />";
}

Dit doet exact hetzelfde als jouw code. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
-NMe- schreef op zaterdag 29 september 2007 @ 21:03:
Dit doet exact hetzelfde als jouw code. ;)
Al doende leert men :)

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
-NMe- schreef op zaterdag 29 september 2007 @ 21:03:
PHP:
1
2
3
4
$datum = $rij["datum"];
$itemlang = $rij["itemlang"];
$jaar = $rij["jaar"];
$maand = $rij["maand"];
Als je dat dan toch wilt:
PHP:
1
extract($rij);

Verwijderd

Topicstarter
Ik ben er uit gekomen via de DATE_FORMAT. Bedankt
Pagina: 1