Ankündigung

Einklappen
Keine Ankündigung bisher.

Artikel gruppieren / Ausgabe nach Rubriken

Einklappen

Neue Werbung 2019

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

  • Artikel gruppieren / Ausgabe nach Rubriken

    Hallo,

    ich bin noch ganz am Anfang was meine PHP Kenntnisse angeht. Deshalb habe ich eine Frage an euch und hoffe dass wir zusammen mein Problem gelöst bekommen, sollte dieses überhaupt so zu lösen sein.

    Ausgangspunkt ist die Funktion Uebersicht die sorgt dafür dass ich zu einem bestimmten Thema alle Artikel angezeigt bekomme, klappt auch.

    PHP-Code:
    function Uebersicht($mysqli$id) {
        
            
    $stmt $mysqli->prepare("SELECT artikel_id, 
                                             artikel_type, 
                                             artikel_pkategorie, 
                                             artikel_hersteller, 
                                             artikel_was, 
                                             artikel_bezeichnung, 
                                             artikel_bild, 
                                             artikel_farbe, 
                                             artikel_preis, 
                                             artikel_status, 
                                             artikel_produkt_url, 
                                             farbe_id, 
                                             farbe_titel, 
                                             farbe_grafik  
                                        
                                        FROM produkte
                                        LEFT JOIN produkte_farben ON produkte_farben.farbe_id = produkte.artikel_farbe 
                                        WHERE artikel_was = ? "
    );
             
            
    $stmt->bind_param("s"$id);
            
    $stmt->execute();
            
    $stmt->bind_result($artikel_id
                               
    $artikel_type
                               
    $artikel_pkategorie
                               
    $artikel_hersteller
                               
    $artikel_was
                               
    $artikel_bezeichnung
                               
    $artikel_bild
                               
    $artikel_farbe
                               
    $artikel_preis
                               
    $artikel_status
                               
    $artikel_produkt_url
                               
    $farbe_id
                               
    $farbe_titel
                               
    $farbe_grafik
                            
    );
            
            
    $stmt->store_result();
                
            if(
    $stmt->num_rows() >  0) {     
                while (
    $stmt->fetch()){
                    
    $Uebersicht[] = array( 
                        
    'artikel_id'              => $artikel_id,
                        
    'artikel_type'            => $artikel_type,
                        
    'artikel_pkategorie'      => $artikel_pkategorie,
                        
    'artikel_hersteller'      => $artikel_hersteller,
                        
    'artikel_was'             => $artikel_was,
                        
    'artikel_bezeichnung'     => $artikel_bezeichnung,
                        
    'artikel_bild'            => $artikel_bild,
                        
    'artikel_farbe'           => $artikel_farbe,
                        
    'artikel_preis'           => $artikel_preis,
                        
    'artikel_status'          => $artikel_status,
                        
    'artikel_produkt_url'     => $artikel_produkt_url,
                        
    'farbe_id'                => $farbe_id,
                        
    'farbe_titel'             => $farbe_titel,
                        
    'farbe_grafik'            => $farbe_grafik
                    
    );
                }
                return 
    $Uebersicht;
                }
            } 

    Die Abfrage in meiner artikel.php sieht so aus

    PHP-Code:
    <?php 
    $Uebersicht 
    Uebersicht($mysqli$Detail->id);
    foreach(
    $Uebersicht as $array){ 
    ?>

    <div class="Box">
    <h3><?php echo htmlspecialchars($array['artikel_bezeichnung']); ?></h3>
    <?php if ($array['artikel_bild'] > 0): ?>
        <img src="<?php echo htmlspecialchars($array['artikel_bild']); ?>" alt="Produktbild für: <?php echo htmlspecialchars($array['artikel_bezeichnung']); ?>">
    <?php endif; ?>
    </dir>
    <?php if ($array['artikel_farbe'] > ""): ?>
        <li><span>Farbe:</span> <?php echo htmlspecialchars($array['artikel_farbe']); ?></li>
    <?php endif; ?>

    <?php 
    }
    ?>
    Das HTML habe ich gekürzt, da dieses erstmal nichts mit meinem Problem zu tun hat. Jetzt möchte ich gerne meine Artikel gruppieren. Im Feld artikel_pkategorie steht eine Zahl z.B. eine 1 für Büro eine 2 für Schule. Die Ausgabe sollte anschließend folgendermaßen ausgegeben werden:


    Titel: Büro
    • Artikel 1
    • Artikel 2
    • Artikel 3
    • usw…

    Titel: Schule
    • Artikel 1
    • Artikel 2
    • Artikel 3
    • usw…

    Ist dieses mit einer Abfrage möglich oder muss ich erst alle Kategorien auslesen und in der jeweiligen Kategorie eine Funktion starten, die genau diese Artikel ausließt (das wäre meine Idee, was vielleicht viel Datenbank-Trafik wäre). Ich hoffe ich konnte es so rüberbringen, dass es jeder versteht.



  • #2
    Siehe hier: http://php-de.github.io/jumpto/grupp...h/#beispiel-1b

    Kommentar


    • #3
      Vielen Dank @Hausi für den Link, hat wunderbar geklappt, Hier meine Lösung

      PHP-Code:

      function Uebersicht($mysqli, $id) {
          
              $stmt = $mysqli->prepare("SELECT artikel_id, 
                                               artikel_type, 
                                               artikel_pkategorie, 
                                               artikel_hersteller, 
                                               artikel_was, 
                                               artikel_bezeichnung, 
                                               artikel_bild, 
                                               artikel_farbe, 
                                               artikel_preis, 
                                               artikel_status, 
                                               artikel_produkt_url, 
                                               farbe_id, 
                                               farbe_titel, 
                                               farbe_grafik,
                                               kategorien_id, 
                                               kategorien_titel, 
                                               kategorien_label, 
                                               kategorien_status  
                                          
                                          FROM produkte
                                          LEFT JOIN produkte_farben ON produkte_farben.farbe_id = produkte.artikel_farbe 
                                          LEFT JOIN produktkategorien ON produktkategorien.kategorien_id = produkte.artikel_pkategorie
                                          WHERE artikel_was = ? 
                                          ORDER BY produkte.artikel_type, produktkategorien.kategorien_id
                                      ");
               
              $stmt->bind_param("s", $id);
              $stmt->execute();
              $stmt->bind_result($artikel_id, 
                                 $artikel_type, 
                                 $artikel_pkategorie, 
                                 $artikel_hersteller, 
                                 $artikel_was, 
                                 $artikel_bezeichnung, 
                                 $artikel_bild, 
                                 $artikel_farbe, 
                                 $artikel_preis, 
                                 $artikel_status, 
                                 $artikel_produkt_url, 
                                 $farbe_id, 
                                 $farbe_titel, 
                                 $farbe_grafik,
                                 $kategorien_id, 
                                 $kategorien_titel, 
                                 $kategorien_label, 
                                 $kategorien_status
                              );
              
              $stmt->store_result();
                  
              if($stmt->num_rows() >  0) {     
                  while ($stmt->fetch()){
                      $Uebersicht[] = array( 
                          'artikel_id'              => $artikel_id,
                          'artikel_type'            => $artikel_type,
                          'artikel_pkategorie'      => $artikel_pkategorie,
                          'artikel_hersteller'      => $artikel_hersteller,
                          'artikel_was'             => $artikel_was,
                          'artikel_bezeichnung'     => $artikel_bezeichnung,
                          'artikel_bild'            => $artikel_bild,
                          'artikel_farbe'           => $artikel_farbe,
                          'artikel_preis'           => $artikel_preis,
                          'artikel_status'          => $artikel_status,
                          'artikel_produkt_url'     => $artikel_produkt_url,
                          'farbe_id'                => $farbe_id,
                          'farbe_titel'             => $farbe_titel,
                          'farbe_grafik'            => $farbe_grafik,
                          'kategorien_id'           => $kategorien_id,
                          'kategorien_titel'        => $kategorien_titel,
                          'kategorien_label'        => $kategorien_label,
                          'kategorien_status'       => $kategorien_status
                      );
                  }
                  return $Uebersicht;
                  }
              }

       ?>

      <?php 
      $Uebersicht 
      Uebersicht($mysqli$Detail->id);
      $last_entry null;

      foreach(
      $Uebersicht as $array){

          if (
      $last_entry != $array['artikel_pkategorie']) { ?>
                                              
              <div class="headerTitel"><?php echo htmlspecialchars($array['kategorien_titel']) ?></div>
                                              
              <?php $last_entry $array['artikel_pkategorie']; 
          } 
      ?>

      <div class="Box">
      <h3><?php echo htmlspecialchars($array['artikel_bezeichnung']); ?></h3>
      <?php if ($array['artikel_bild'] > 0): ?>
          <img src="<?php echo htmlspecialchars($array['artikel_bild']); ?>" alt="Produktbild für: <?php echo htmlspecialchars($array['artikel_bezeichnung']); ?>">
      <?php endif; ?>
      </dir>
      <?php if ($array['artikel_farbe'] > ""): ?>
          <li><span>Farbe:</span> <?php echo htmlspecialchars($array['artikel_farbe']); ?></li>
      <?php endif; ?>

      <?php 
      }
      ?>

      Kommentar


      • #4
        Du solltest deine Funktion noch so anpassen, dass du ein leeres Array als Ergebnis bekommst auch wenn deine Abfrage keine passenden Datensätze findet.
        Am einfachsten ist es $Uebersich direkt am Anfang des Anweisungsblocks zu definieren, dann zu füllen wie du es schon machst, und das return-Statement ganz ans Ende der Funktion zu setzen.

        Kommentar

        Lädt...
        X