3 verknüpfte Tabellen in Schleife ausgeben (geschachtelt)

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

  • 3 verknüpfte Tabellen in Schleife ausgeben (geschachtelt)

    Hallo!

    Ich habe 3 Tabellen in einer Datenbank. Sehen aus wie folgt:



    Erläuterung:
    Zu jedem Produkt wird eine Kategorie-ID (k_id) gespeichert, die der id aus der Tabelle 'kategorien' entspricht.
    Zu jeder Katagorie wird wiederum die g_id gespeichert, welche der id aus der Tabelle 'gruppen' entspricht.
    Somit lässt Sich jedes Produkt einer Kategorie und der dazugehörigen Gruppe zuordnen.


    Ich möchte einen Algorithmus bauen, welcher wie folgt abläuft:
    PHP-Code:
    von $g=1 bis anzahl(gruppen) {

        echo 
    gruppe[$g].name
        
    echo "<div class="tabber">"

        
    von $k=1 bis anzahl (kategorien der gruppe $g) {
            echo 
    "<div class="tabbertab" title="katgegorie[$k].name">"
            
    echo " <table id="katgegorie[$k].name" class="tb_inhalt">"
            
    echo "  <tr>"
            
    echo "   <th>&nbsp;</th>"
            
    echo "   <th>Bezeichnung</th>"
            
    echo "   <th>Beschreibung</th>"
            
    echo "   <th>Preis</th>"
            
    echo "  </tr>"
        
           
    von $p=1 bis anzahl (produkte der kategorie $k) {
            echo 
    "  <tr>"
            
    echo "   <td><input type='checkbox' name='bestellung[]' id='$p' value='$p'></td>"
            
    echo "   <td>produkt[$p].bezeichnung</td>"
            
    echo "   <td>produkt[$p].beschreibung</td>"
            
    echo "   <td>produkt[$p].preis</td>"
            
    echo "  </tr>"
           
    }
        echo 
    " </table>"
        
    echo "</div>
        }
     echo "
    </div

    Ich habe bereits eine funktionierende Version einer Funktion, die sich um die ausgabe ab den kategorien kümmert:

    PHP-Code:
    // So sieht der Aufruf später aus:

    <div class="tabber">
        <? post_items("Kategorie 1",1); ?>
        <? post_items("Kategorie 2",2); ?>
        <? post_items("Kategorie 3",3); ?>
    </div>
    PHP-Code:
      // $tb_titel - Der Tabellen-Titel. und auch gleich der Kategorie-Name
      // $kat - Kategorie-ID

      
    function post_items($tb_titel,$kat) {

        
    $sel_produkte "
            SELECT p.id,
                 p.bezeichnung,
                 p.beschreibung,
                 p.preis 
            FROM produkte AS p 
            INNER JOIN kategorien AS k 
                ON (p.k_id = k.id) 
            WHERE 
    $kat = p.k_id"

        
    $inhalt="";
        
    $tabelle="
          <div class=\"tabbertab\" title=\"
    $tb_titel\">
            <table id=\"
    $tb_titel\" class=\"tb_inhalt\">
             <tr height=\"23\">
              <th width=\"5\">&nbsp;</th>
              <th width=\"160\">Bezeichnung</th>
              <th width=\"500\">Beschreibung</th>
              <th width=\"35\">Tagespreis</th>
             </tr>"
    ;

        
    $erg mysql_query ($sel_produkte);
        
    $preiskomma="";
        while (
    $rowmysql_fetch_row($erg)){ 
            
    $preiskomma number_format($row[3], 2",""."); 
            
    $inhalt $inhalt."
             <tr>
              <td><input type='checkbox' name='bestellung[]' id='
    $row[0]' value='$row[0]'></td>
              <td>
    $row[1]</td>
              <td>
    $row[2]</td>
              <td style='text-align:right'>
    $preiskomma €</td>
             </tr>"

        }

        
    $tabelle_end="
            </table>
          </div>"
    ;

        echo 
    $tabelle.$inhalt.$tabelle_end;
      } 

    Leider habe ich es nicht hinbekommen, die bereits bestehende Funktion so anzupassen, dass man die Ausgabe der Gruppen, Kategorien und Produkte vollständig automatisieren kann.. Es gibt nebenbei gesagt über 100 Kategorien und für jede wird die function post_items() bisher manuell aufgerufen...

    Würde mich sehr freuen, wenn mir jemand in dem Problem zu Hilfe eilen könnte!


    Lg, dopeline
    Zuletzt geändert von dopeline; 31.03.2009, 21:32.

  • #2
    um mal bei deinem Pseudo-Code zu bleiben, der ja eigentlich alles beinhaltet
    PHP-Code:
    $resultGruppenmysql_query("SELECT id, name FROM gruppen");

    while(
    $gruppe mysql_fetch_assoc($resultGruppen)){

        echo 
    gruppe['name'];
        echo 
    "<div class=\"tabber\">";
        
    $resultKategorien mysql_query("SELECT id, name FROM kategorien WHERE g_id = ".$gruppe['id']);
        while(
    $kategorie mysql_fetch_assoc($resultKategorien)) {
            echo 
    "<div class=\"tabbertab\" title=\"".$katgegorie['name']."\">";
            echo 
    " <table id=\"".$katgegorie['name']."\" class=\"tb_inhalt\">";
            echo 
    "  <tr>";
            echo 
    "   <th>&nbsp;</th>";
            echo 
    "   <th>Bezeichnung</th>";
            echo 
    "   <th>Beschreibung</th>";
            echo 
    "   <th>Preis</th>";
            echo 
    "  </tr>";
            
    $resultProduke mysql_query("SELECT id, bezeichnung, beschreibung, preis FROM produkte WHERE k_id = ".$kategorie['id']);
            while(
    $produkt mysql_fetch_assoc($resultProdukte)) {
                echo 
    "  <tr>";
                echo 
    "   <td><input type='checkbox' name='bestellung[]' id='".$produkt['id']."' value='$p'></td>";
                echo 
    "   <td>".$produkt['bezeichnung']."</td>";
                echo 
    "   <td>".$produkt['beschreibung']."</td>";
                echo 
    "   <td>".$produkt['preis']."</td>";
                echo 
    "  </tr>";
           }
        echo 
    " </table>";
        echo 
    "</div>";
        }
     echo 
    "</div>"
    so in der RIchtung sollte es funktionieren, es lässt sich natürlich auch alles in einem Query bearbeiten, aber das überlass ich dann dir

    Kommentar


    • #3
      ja da bedank ich mich recht herzlich für die Hilfe!

      Bin nicht so der Freund von Copy&Paste, nachdem ich deine Lösung nachvollziehen konnte, brauchte ich bei meiner bisherigen Überlegung nur einiges ändern! Super!

      Liebe Grüße und ein erholsames Wochenende wünsch ich.

      Kommentar

      Lädt...
      X