Ankündigung

Einklappen
Keine Ankündigung bisher.

[Gelöst] Liste nach Datum sortieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Gelöst] Liste nach Datum sortieren

    Hallo.

    Ich bin nicht wirklich gut in PHP und brauche gerade mal einen Denkanstoß.
    Im Moment bin ich dabei eine kleine private Webseite zu basten, bei meinem Problem geht es um den Changelog.
    https://www.nur-spielen.de/changelog.php

    Wie man sieht ist er in einer Liste geführt, dieses mache ich im Moment noch über die Bearbeitung der changelog.php, würde dieses aber gerne umlegen in eine Datenbank, diese habe ich soweit auch schon vorbereitet, siehe Anhang.

    Nun möchte ich ganz gerne nach Datum sortieren.
    • 10.01.2019
      • [Neu]
        • Eintrag 1
        • Eintrag 2
      • [Geändert]
        • Eintrag 1
      • [Behoben]
        • Eintrag 1
        • Eintrag 2
    • 09.01.2019
      • [Neu]
        • Eintrag 1
        • Eintrag 2
        • usw....

    Mit meiner aktuellen Abfrage steht es fast richtig, nur das er immer das Datum dazuschreibt (siehe Anhang), deswegen gehe ich mal davon aus das mein Problem in der While Schleife liegt, oder?

    Mein Code für die Ausgabe:

    PHP-Code:
    .
    .
    .
    $ergebnisChangelog mysqli_query($db_link"SELECT * FROM changelog WHERE DAY(change_datum) ORDER BY DAY(change_datum) DESC, change_status");
    .
    .
    .
    echo 
    '<ul>';
        while(
    $row mysqli_fetch_object($ergebnisChangelog)) {
            
    $changeId          $row->id;
            
    $changeStatusAuslesen   $row->change_status;
            
    $changeBeschreibung     $row->change_beschreibung;
            
    $changeDatumAuslesen    strtotime($row->change_datum);
            
    $changeDatum            date("d.m.Y"$changeDatumAuslesen);
            if(
    $changeStatusAuslesen == "1") {
                
    $changeStatus '<span id="changeNew">[Neu]</span>';
            } elseif(
    $changeStatusAuslesen == "2") {
                
    $changeStatus '<span id="changeEdit">[Geändert]</span>';                      
            } elseif(
    $changeStatusAuslesen == "3") {
                
    $changeStatus '<span id="changeFix">[Behoben]</span>';                        
            }

            echo 
    '<li><strong>' $changeDatum '</strong>';
                echo 
    '<ul>';
                    echo 
    '<li>' $changeStatus;
                        echo 
    '<ul>';
                            echo 
    '<li>' $changeBeschreibung '</li>';
                        echo 
    '</ul>';
                    echo 
    '</li>';
                echo 
    '</ul>';
            echo 
    '</li>';
        }
    echo 
    '</ul>'
    Ich weiß, die ganzen echo´s müssen nicht sein macht es mir aber leichter zum lesen.

    Vielen dank schon mal fürs lesen.

    Gruß Heiko
    Angehängte Dateien

  • #2
    Was du brauchst nennt sich Gruppenbruch, lies dich einfach mal ein und versuche dein Glück.

    Kommentar


    • #3
      Gruppenbruch... wieder nen neues Wort gelernt.

      Danke dir, sieht sehr nach dem aus was mir helfen könnte.

      Kommentar


      • #4
        Du gibst ja auch das Datum in jedem Schleifendurchlauf aus, willst es aber eigentlich nur dann ausgeben, wenn es sich ändert.

        Entweder sortierst Du die Einträge vor, indem Du sie halt erst mal in ein Array schreibst:

        PHP-Code:
        $sortiert[$datum][] = array('eigenschaft1' => $status,'eigenschaft2' => $bechreibung); 
        oder Du führst beim durchlauf Deiner vorhandenen while-Schleife eine Kontrollvariable ein

        also aktuelles Datum vs. vorheriges Datum und gibst nur bei Datumswechsel das Datum aus.

        [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

        Kommentar


        • #5
          Vielen Dank an euch beide, beide Tipps haben mich dann auf den richtigen Pfad gebracht.

          Mein Ergebnis sieht man im Anhang und den passenden Quellcode hier:

          PHP-Code:
                          echo '<ul>';
                              
          $last_entry null;

                              while(
          $row mysqli_fetch_object($ergebnisChangelog)) {
                                  
          $changeId               $row->id;
                                  
          $changeStatusAuslesen   $row->change_status;
                                  
          $changeBeschreibung     $row->change_beschreibung;
                                  
          $changeDatumAuslesen    strtotime($row->change_datum);
                                  
          $changeDatum            date("d.m.Y"$changeDatumAuslesen);
                                  if(
          $changeStatusAuslesen == "1") {
                                      
          $changeStatus '<span id="changeNew">[Neu]</span>';
                                  } elseif(
          $changeStatusAuslesen == "2") {
                                      
          $changeStatus '<span id="changeEdit">[Geändert]</span>';                      
                                  } elseif(
          $changeStatusAuslesen == "3") {
                                      
          $changeStatus '<span id="changeFix">[Behoben]</span>';                        
                                  }

                                  if(
          $last_entry != $changeDatum) {
                                      echo 
          '<li><strong>' $changeDatum '</strong>';
                                      
          $last_entry $changeDatum;
                                  }
                                          echo 
          '<ul>';
                                              echo 
          '<li>' $changeStatus;
                                                  echo 
          '<ul>';
                                                      echo 
          '<li>' $changeBeschreibung '</li>';
                                                  echo 
          '</ul>';
                                              echo 
          '</li>';
                                          echo 
          '</ul>';
                                  if(
          $last_entry != $changeDatum) {
                                      echo 
          '</li>';
                                  }
                              }
                          echo 
          '</ul>'
          Mit verbeugenden Grüßen

          Heiko
          Angehängte Dateien

          Kommentar

          Lädt...
          X