Auflistung aus MySQL und jeweils der Titel dazu?

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

  • Auflistung aus MySQL und jeweils der Titel dazu?

    Liebe PHP-Gemeinde

    Ich hoffe es ist ok, wenn ich für diese Frage ein neues Thema erstelle. Auch weil es eine Fortsetzung bzw. eine Abänderung dieses Themas ist:
    Thema

    Folgender Datenbank-Aufbau ist vorhanden (wobei die Zahl am Anfang die ID ist und die am Schluss der Status):
    Code:
    1, Produkt A, weiss, 1
    2, Produkt A, gelb, 1
    3, Produkt A, blau, 1
    4, Produkt A, rot, 1
    5, Produkt B, weiss, 1
    6, Produkt B, gelb, 1
    7, Produkt B, blau, 1
    8, Produkt B, rot, 1
    9, Produkt C, weiss, 1
    10, Produkt C, gelb, 1
    11, Produkt C, blau, 1
    12, Produkt C, rot
    Ausgabe sollte folgendermassen sein:

    Produkt A
    weiss
    gelb
    blau
    rot

    Produkt B
    weiss
    gelb
    blau
    rot

    Produkt C
    weiss
    gelb
    blau
    rot

    Der Ansatz ist folgender:

    Code:
    $get_sql = new rex_sql;
    $out = '';
    for($z=0; $z<$get_sql->getRows(); $z++)
    {
    		
    if($get_sql->getValue("status") == 1)
    		{
                    $out .= '<p>'.$get_sql->getValue("farbe").'</p>';
    		}
    		$get_sql->next();
    }
    	
    $out .= '';
    return $out;
    So listet es mir einfach alle Farben untereinander auf. Und zwar in der richtigen Reihenfolge wie oben aufgeführt. Wie bekomme ich es aber nun hin, dass vor jeder Farbenauflistung auch das Produkt (A, B, C) angezeigt wird?

  • #2
    Das Stichwort lautet: Gruppenwechsel
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Gruppenwechsel ist mir absolut neu. Aber schauen wir mal ob ich es richtig verstanden habe...

      Im Prinzip geht es beim Gruppenwechsel in meinem Fall um folgendes:
      Ich gebe Produkt 1 aus mit der ersten Farbe.
      Die Abfrage läuft weiter.. jetzt muss ich abfragen, ob der Titel "Produkt 1" bereits bei der vorherigen Ausgabe drin war.
      Falls ja, gebe mir keinen Titel aus.
      Falls nein, gebe Titel aus.
      Habe ich das soweit richtig verstanden?


      Code:
      $get_sql = new rex_sql;
      $out = '';
      $titel = ''
      for($z=0; $z<$get_sql->getRows(); $z++)
      {
      $titel = $get_sql->getValue("titel");
      		
      if($get_sql->getValue("status") == 1)
      		{
                             if($titel != $get_sql->getValue("titel");)
                             {
                             $out .= '<p></strong>'.$titel.'</strong></p>';
                             }
                      $out .= '<p>'.$get_sql->getValue("farbe").'</p>';
      		}
      		$get_sql->next();
      }
      	
      $out .= '';
      return $out;
      Ich habe das Gefühl dass meinem Code noch etwas fehlt... Mir ist nicht ganz klar wie ich die Abfrage von der vorherigen Ausgabe machen soll. Ich nehme mal an, ich verstehe den Gruppenwechsel richtig, habe es aber nicht korrekt umgesetzt... Stimmt's?

      Kommentar


      • #4
        Zitat von Fanello Beitrag anzeigen
        Ich nehme mal an, ich verstehe den Gruppenwechsel richtig, habe es aber nicht korrekt umgesetzt... Stimmt's?
        Ja, soweit ist das schon richtig.
        Mir ist nicht ganz klar wie ich die Abfrage von der vorherigen Ausgabe machen soll.
        Du merkst dir einfach am Ende jedes Schleifendurchlaufs den aktuellen Wert als „vorherigen”.
        Am Anfang der Schleife vergleichst du, ob der (dabei) aktuelle Wert gleich dem vorherigen ist. Wenn nicht, gibst du ihn aus.
        Um das ganze sauber zu haben, initialisierst du vor der Schleife noch deine Merkvariable für den ersten Durchlauf mit einem Wert, der in den eigentlichen Werten garantiert nicht vorkommt.

        PHP-Code:
        $wertAusVorherigemDurchlauf false;
        schleife ( ... ) {
          if(
        $aktuellerWert !== $wertAusVorherigemDurchlauf) {
            
        // der aktuelle Wert ist nicht mehr gleich dem vorherigen,
            // es hat also ein Gruppenwechsel stattgefunden
            
        Ausgabe($aktuellerWert);
          }
          
        // weitere Vararbeitung, Ausgabe restlicher Daten des Datensatzes
          // ...

          // aktuellen Wert für nächsten Durchlauf als „vorherigen” merken
          
        $wertAusVorherigemDurchlauf $aktuellerWert;

        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Code:
          $get_sql = new rex_sql;
          $titel_vorher = 'mami';
          $out = '';
          for($z=0; $z<$get_sql->getRows(); $z++)
          {
          		
          if($get_sql->getValue("status") == 1)
          		{
                          $titel_aktuell = $get_sql->getValue("titel");
          		if($titel_aktuell !== $titel_vorher) {
          		    $out .= '<h2>'.$get_sql->getValue("titel").'</h2>';
              		}
                          $out .= '<p>'.$get_sql->getValue("farbe").'</p>';
                          $titel_vorher = $titel_aktuell;
          		}
          		$get_sql->next();
          }
          	
          $out .= '';
          return $out;
          vielen Dank, habs kapiert! So funktioniert es jetzt!!!
          Zuletzt geändert von Fanello; 11.01.2010, 14:03.

          Kommentar


          • #6
            OffTopic:
            Wundere mich gerade etwas, dass @wahsaga dich nicht auf dein scheinbar nicht gerade optimales DB-Layout aufmerksam gemacht hat.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              OffTopic:
              Nen Gruppenwechsel hätte es ja trotzdem benötigt.

              Kommentar

              Lädt...
              X