Ausgabe von Datenbankabfrage

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

  • Ausgabe von Datenbankabfrage

    Hallo, kann mir jemand bitte den entscheidenen Tipp geben, wie ich des hinbekomm?
    Es handelt sich um eine Kategorietabelle, sollte also möglichst skalierbar sein!
    Also, gegeben ist folgende Datenbankstruktur:

    id - sort - name - parent_id

    Die Spalte 'sort' regelt die Reihenfolge der Ausgabe, parent_id legt fest, welche kategorie übergeordnet ist!

    Angenommen ich habe folgende Daten:

    PHP-Code:
    Home 0
    Blog 0
    Leistungen 0
      4 
    Webdesign 3
      5 
    -Webentwicklung 3
    Projekte 0
      7 
    Webdesign 6
        8 
    ContentManagement 
    Die Daten kommen bislang über eine ganze effe SELECT abfrage, sprich alle Daten aus der Datenbank landen im return, sicher, bekomm ich die Daten über foreach ausgegeben, da aber die Kategorietiefe nicht festgelegt ist, wird das mit foreach() sehr anstrengend! Hat jemand eine bessere Idee?

    Ich möchte die Datenbank ungerne ändern, da die gesamte Applikation dann umgeschrieben werden müsste!

    Viele Grüße,
    Dennis
    Musik beflügelt unseren Geist

  • #2
    Bastel dir doch einfach eine Funktion, in der eine while-Schleife eingebaut ist:
    PHP-Code:
    function anzeigen($id){
            
    $sql[$id] = 'SELECT * FROM table WHERE parent_id='.$id;
            
    $search[$id] = mysql_db_query($sql);
            while ( 
    $row[$id] = mysql_fetch_row $search[$id] ) ){
                           echo 
    $row[$id][0].'-'.$row[$id][1].'-'.$row[$id][2].'-'.row[$id][3].'<br>';
                           
    anzeigen($row[$id][0]);
             }

    Bin noch n totaler Anfänger... vielleicht nicht der richtige Weg, kann für nix garantieren.
    vor der while- SChleife würd ich noch prüfen, ob $row[$id] Daten enthält...
    Zuletzt geändert von Speedyspin; 22.04.2008, 08:15.

    Kommentar


    • #3
      Speedyspins Lösung fehlt noch ein ORDER BY sort.

      Außerdem würde ich DB-Abfrage und Ausgabe in zwei Funktionen aufteilen. So kann sich das eine relativ unabhängig vom anderen mal ändern.
      Weil es sich anbietet, kann man die DB-Ergebnisse auch gleich noch in einer static Variablen cachen. Schadet erstmal nichts, spart aber DB-Abfragen, wenn man (Teil-)Bäume mehrfach abruft.

      PHP-Code:
      function get_tree($root_id 0
      {
          static 
      $tree;
          
          if (!isset(
      $tree[$root_id])) {
              
      $tree[$root_id] = array();
              
      $result mysql_query('SELECT parent_id, sort, id, name FROM cat WHERE parent_id = '.$root_id.' ORDER BY sort');
              while (
      $item mysql_fetch_object($result)) {
                  
      $tree[$root_id][$item->sort] = $item;
              }
          }
          
          return 
      $tree[$root_id];
      }

      function 
      show_tree($tree)
      {
          echo 
      '<ul>';
          foreach (
      $tree as $item) {
              echo 
      '<li>'.$item->sort.' - '.$item->name;
              
      show_tree(get_tree($item->id));
              echo 
      '</li>';
          }
          echo 
      '</ul>';
      }

      show_tree(get_tree()); 
      Alternativ könntest du auch alle Daten gleich beim ersten Aufruf von get_tree() aus der DB holen und in $tree speichern. Dann belastest du die DB nur einmal.

      Kommentar


      • #4
        genau, es soll ja auch nur mit einer abfrage ausgelesen werden, bei einer etwas größeren Struktur würde sonst jede Menge Overhead entstehen! Die Änderungen in der Abfrage der Daten sind kein Problem, da MVC und die Models sich um sämtliche Abfragen kümmern!
        Das Problem wäre nur eine Änderung der Datenbank, da einige Spalten verknüpft sind!

        im Endeffekt hole ich alles über:

        PHP-Code:
        $sql 'SELECT * FROM categories WHERE published=1'
        Das Problem ist nun, das Ganze in eine Form zu bekommen, mir fällt nicht ein, wie ich das Ganze in einem Aufruf in eine Verschachtelung bekomme bei x-Kategorien!

        Danke für eure Hilfe!
        Dennis
        Zuletzt geändert von Bersi667; 22.04.2008, 15:54.
        Musik beflügelt unseren Geist

        Kommentar

        Lädt...
        X