2016-09-01 2 views
1

Ich habe 2 Tabellen tl_docs_categories Hexe ist die Elterntabelle für tl_docs. Struktur der Tabellen sind:PHP - Holen Sie Daten aus SQL-Datenbank recurisivly

tl_docs_categories 
[ 
    id, 
    category_name, 
    pid (give the posibility to create subcategories/pid = tl_docs_categories.id if have subcategory) 
] 
tl_docs 
[ 
    id, 
    doc_name, 
    doc_url, 
    pid(id for category) 
] 

So habe ich so etwas in meiner Datenbank:

enter image description here

Was ich will, ist alles Ergebnis zurück, wenn i Kategorie Hexe wählen in rot, i Ich möchte alle Doku- und Unterkategoriennamen zurückholen. Aus meiner Sicht verwende ich ein SELECT-Formular, um die ID der ausgewählten übergeordneten Kategorie in rot zurückzugeben.

Hier ist meine PHP-Funktion:

public function checkSQL($id) 
{ 
    if(!empty($id)) 
    { 
     /* SQL CHECK IF HAVE DOCS */ 
     $sqlDoc = "SELECT category_name, doc_name, doc_url FROM tl_docs_categories dc 
        LEFT JOIN tl_docs d ON dc.id = d.pid WHERE d.pid = " . $id; 
     $objDocs = Database::getInstance()->query($sqlDoc); 
     if ($objDocs->numRows == 0) 
     { 
      /* SQL CHECK IF HAVE CHILD */ 
      $sqlChild = "SELECT dc.id, category_name, doc_name, doc_url FROM tl_docs_categories dc 
         LEFT JOIN tl_docs d ON dc.id = d.pid WHERE dc.pid =" . $id; 
      $objDocs = Database::getInstance()->query($sqlChild); 
       return $objDocs; 
      } 
     } 
     else 
     { 
      return $objDocs; 
     } 
    } 
} 

Ich bin ein wenig verloren und ich habe nicht eine Lösung haben es recureivly zu tun und retrun Daten für jede Kategorie, Unterkategorie, subsubcategory und dann.

Vielen Dank für Ihre Hilfe bei advaice.

+0

Sorry ich verstehe nicht, was Sie um Hilfe bitten! Was ist das Ergebnis, das Sie suchen – RiggsFolly

+0

Ich möchte meine Funktion in rekursive Funktion, die jede Ebene überprüft und alle Dokumente, Unterkategorien Namen aus der übergeordneten Kategorie, die in rot auf Bild, das ich in meiner Sicht ausgewählt hat, zu transformieren. Beispiel ich wähle letzte rote Kategorie: Red id = 15; Grüne ID = 16; Grünes Pid = 15; Blaue ID = 17; Blau pid = 16; Also ich möchte alle Dokumente Daten und Kategorien Namen aus der Kategorie, die ich wählen, Hexe ist die rote auf. Sorry über mein Englisch: s –

Antwort

0

Ich bin mir nicht sicher über die Syntax, aber die Idee ist, checkSQL auf jeder Ebene aufzurufen, wenn Sie alle Ergebnisse zurückgeben möchten, dann müssen Sie die $objDocs Var zu einem Array anpassen.

public function checkSQL($id) 
{ 
    if(!empty($id)) 
    { 
     /* SQL CHECK IF HAVE DOCS */ 
     $sqlDoc = "SELECT category_name, doc_name, doc_url FROM tl_docs_categories dc 
        LEFT JOIN tl_docs d ON dc.id = d.pid WHERE d.pid = " . $id; 
     $objDocs = Database::getInstance()->query($sqlDoc); 

     if ($objDocs->numRows > 0) { 
      foreach ($objDocs->fetchColumn() as $row) { 
       $objDocs = $this->checkSQL($row->id); 
      } 
     } 

     return $objDocs; 
    } 

    return null; 
} 
Verwandte Themen