Avatar billede kook Nybegynder
24. februar 2010 - 10:10 Der er 9 kommentarer og
1 løsning

Gruppering efter dato

Hejsa,

Jeg sidder og bryder mit hovede med et lille problem. Jeg er igang med at bygge et logging system til at logge aktivitet på et website.

I selve administrationen trækker jeg så loggen ud, og viser denne.
Og her er det så det bliver spændende, fordi jeg vil gerne gruppere loggen efter dato.

Selve tabellen indeholder flg.: ID, timestamp, user_id, beskrivelse.

Pt. så har jeg et output der ser sådan her ud:
2010-02-23: Bruger X loggede ind.
2010-02-23: Bruger Y lavede nyt indlæg.
2010-02-23: Bruger X besvarede ticket.
2010-02-23: Bruger Z loggede ind.

Og jeg kunne godt tænke mig at det endte med at se således ud:

2010-02-23:
Bruger X loggede ind.
Bruger Y lavede nyt indlæg.
Bruger X besvarede ticket.
Bruger Z loggede ind.

Men jeg kan simpelthen ikke vikle hjernen omkring hvordan jeg skal gribe det her an.
Avatar billede repox Seniormester
24. februar 2010 - 10:23 #1
<?php
  while( $obj = mysql_fetch_object($mysql_result) )
    $events[$obj->timestamp][] = "Bruger ".$obj->user_id." ".$obj->beskrivelse;

?>

  ...

  <?php foreach( $events as $date => $lines ): ?>
    <b>Dato: <?php echo $date; ?></b><br />

    <?php
    foreach( $lines as $line )
      echo $line."<br />";
    ?>
         
  <?php endforeach; ?>
Avatar billede Slettet bruger
24. februar 2010 - 10:50 #2
Repox for President!
Avatar billede kook Nybegynder
24. februar 2010 - 11:01 #3
Enten gør jeg det forkert, eller også er der noget med kode-eksemplet for oven der ikke helt spiller.

Jeg får hvad der svarer til flg. i output:

2010-02-23:
Bruger X loggede ind.
2010-02-23:
Bruger X loggede ind.
Bruger Y lavede nyt indlæg.
2010-02-23:
Bruger X loggede ind.
Bruger Y lavede nyt indlæg.
Bruger X besvarede ticket.
2010-02-23:
Bruger X loggede ind.
Bruger Y lavede nyt indlæg.
Bruger X besvarede ticket.
Bruger Z loggede ind.

Så det nærmer sig, men det spiller stadig ikke helt. Jeg har iøvrigt forsøgt en opdeling af timestamp i kolonnerne "date" og "time".
Avatar billede repox Seniormester
24. februar 2010 - 11:06 #4
Er det et DATETIME felt som er i dit timestamp?
Avatar billede kook Nybegynder
24. februar 2010 - 11:15 #5
Nej. Oprindeligt var det "timestamp" felt, med autogenereret dato fra MySQL (formatet er YYYY-MM-DD HH:MM:SS).

Nu har jeg både timestamp, men har som sagt også tilføjet "date" og "time". De bliver begge to indsat med PHP kode, hvor de bliver lavet med henholdsvis date('Y-m-d') og date('H:i:s').
Avatar billede showsource Seniormester
24. februar 2010 - 11:47 #6
Hvis nu du har datofelt i formatet "datetime" ( 2010-02-24 11:40:34 )

Utestet:

$query = mysql_query(SELECT DATE(datofelt) as dag, datofelt, user_id, beskrivelse FROM din tabel ORDER BY datofelt ASC");

while($rows = mysql_fetch_object($query)) {

echo (!isset($dagen) || $dagen != $rows->dag ? "<p>Dato: ".$rows->dag : "");
echo"<br />".$rows->datofelt.", bruger ".$rows->user_id.", ".$rows->beskeivelse;

$dagen = $rows->dag;

}
Avatar billede showsource Seniormester
24. februar 2010 - 11:49 #7
Nå, der mangler jo ihvertfald " i starten af query.
Avatar billede repox Seniormester
24. februar 2010 - 11:52 #8
Jeg læser det som om dit tidsformat er som et datetime format.
Så kan min kode ændres til:
<?php
  while( $obj = mysql_fetch_object($mysql_result) )
    $events[date("Y-m-d", strtotime($obj->timestamp))][] = "Bruger ".$obj->user_id." ".$obj->beskrivelse;

?>

  ...

  <?php foreach( $events as $date => $lines ): ?>
    <b>Dato: <?php echo $date; ?></b><br />

    <?php
    foreach( $lines as $line )
      echo $line."<br />";
    ?>
         
  <?php endforeach; ?>
Avatar billede kook Nybegynder
24. februar 2010 - 12:03 #9
Woohoo. Så spiller det. Jeg kom til at kopiere tingene dumt ind i min egen kode.

Repox - dit eksempel løste det for mig. Laver du et svar så du kan få nogen point.

Og supermange tak for hjælpen.
Avatar billede repox Seniormester
24. februar 2010 - 12:22 #10
Du fik et svar her...
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