2015-02-13 2 views
5

wollte ich habe 2 TabellenPHP Warenkorb - Kategorien Seite funktioniert nicht wie

Produkte products

und Kategorien
categories
(CatParentId 0 ist die übergeordnete Kategorie).

Was ich versuche zu erreichen ist, wenn ein Benutzer auf die übergeordnete Kategorie klickt, sollte es die in dieser Kategorie gelisteten Produkte sowie seine Produkte der untergeordneten Kategorie abrufen und wenn der Benutzer auf eine der untergeordneten Kategorien klickt, sollte dies geschehen rufen Sie nur die Produkte ab, die in der untergeordneten Kategorie aufgeführt sind.

Hier ist der vollständige Code, die ich bisher benutzt haben, aber ohne Erfolg:

<section class="col-lg-9 col-md-9 col-sm-9"> 
    <?php 
    $catId = $catName = $n = ""; 
    $id = 0; 
    require_once 'Classes/class.Validation.php'; 
    $validate = new Validation(); 
    if (isset($_GET['name']) && $_GET['name'] != "") { 
     $catName = $_GET['name']; 
     $u = "SELECT CatId, CatName, CatParentId FROM categories WHERE CatName = '".$catName."'"; 
     $validate->Query($u); 
     if ($validate->NumRows() >= 1) { 
      while ($rows = $validate->FetchAllDatas()) { 
       $id = $rows['CatId']; 
       $n = $rows['CatName']; 
       $query = "SELECT 
           c.CatName, 
           p.ProdCode, 
           p.ProdName 
          FROM 
           products p, 
           categories c 
          WHERE 
           c.CatId = p.CatId 
           AND 
           c.CatParentId = '".$id."'"; 
       $validate->Query($query); 
       if ($validate->NumRows() >= 1) { 
        while ($row = $validate->FetchAllDatas()) { 
         // show products here 
        } 
       } else { 
        $query = "SELECT 
            c.CatName, 
            p.ProdCode, 
            p.ProdName 
           FROM 
            products p, 
            categories c 
           WHERE 
            c.CatParentId = p.CatId 
            AND 
            c.CatId = '".$id."' 
           "; 
        $validate->Query($query); 
        if ($validate->NumRows() >= 1) { 
         while ($row = $validate->FetchAllDatas()) { 
          // show products here 
         } 
        } 
       } 

      } 
     } 
    } 
    ?> 
</section> 

Ich bin mir ziemlich sicher, dass ich einen logischen Fehler, aber ich kann es nicht finden, wo ich es gemacht habe. Bitte hilf mir. Jede Hilfe wird sehr geschätzt.

Update 1:

Ich habe es auf meinem eigenen gelöst. Verwendet INNER JOIN.

Hier ist der Code - Für die Zukunft: ->

<section class="col-lg-9 col-md-9 col-sm-9"> 
    <?php 
    $catId = $catName = $n = ""; 
    $id = 0; 
    require_once 'Classes/class.Validation.php'; 
    $validate = new Validation('benef8w7_ecommerce'); 
    if (isset($_GET['name']) && $_GET['name'] != "") { 
     $catName = $_GET['name']; 
     $query = "SELECT 
         p.ProdCode, 
         p.ProdRate, 
         c1.CatId, 
         c1.CatName, 
         c2.CatParentId 
        FROM 
         categories c2 
          INNER JOIN 
           categories c1 
          ON 
           c2.CatId = c1.CatParentId 
            INNER JOIN 
             products p 
            ON 
             p.CatId = c1.CatId 
        WHERE 
         c2.CatName = '".$catName."'"; 
     $validate->Query($query); 
     if ($validate->NumRows() >= 1) { 
      while ($row = $validate->FetchAllDatas()) { 
       // show all the products here for both parent and child categories. 
      } 
     } else { 
      $query = "SELECT 
          p.ProdCode, 
          p.ProdName, 
          c.CatId, 
          c.CatParentId, 
          c.CatName 
         FROM 
          products p 
           INNER JOIN 
            categories c 
           ON 
            c.CatId = p.CatId 
         WHERE 
          c.CatName = '".$catName."'"; 
      $validate->Query($query); 
      if ($validate->NumRows() >= 1) { 
       while ($row = $validate->FetchAllDatas()) { 
        // show products here if there are no child categories. 
       } 
      } 
     } 
    } 
    ?> 
</section> 

Aber nach Update 1, ich glaube, ich habe mit anderen Bug/Fehler kommen: ->

Die obigen Abfragen innerhalb Das Update 1 funktioniert einwandfrei, vorausgesetzt, es gibt keine Produkte in der übergeordneten Kategorie, aber es gibt Produkte in der untergeordneten Kategorie. Wenn Produkte in der Elternkategorie (mit Kindkategorie) vorhanden sind, werden die Elternkategorieprodukte nicht angezeigt und nur Kinderkategorieprodukte werden angezeigt.

Ich möchte alle Produkte der übergeordneten Kategorie und auch der untergeordneten Kategorie anzeigen, wenn der Benutzer auf die übergeordnete Kategorie klickt.

Wie behebe ich diesen Bug/Fehler?

+0

bitte mir helfen. Ich versuche das seit 3 ​​Tagen .. –

Antwort

0

Ich bin sehr neu zu PHP und ich dachte nur, ich könnte etwas aus dem Nachdenken über Ihr Problem lernen. Also kam mir dieser Kreisverkehr in den Sinn. Ich habe eine Art Pseudocode benutzt. Ich hoffe, du wirst auf die Idee kommen.

SELECT CatId, CatParentId FROM categories WHERE CatName = '$catName'; 

you save CatId and CatParentId to php vars... 

//is it child? 
    if($CatParentId > 0) { 
    SELECT ProdName FROM products WHERE CatId = '$CatId'; 

    //display all products from this child category 
} else { 
    //for when our category is a parent 
    //we need to find how many childs it has. 
    //I suggest using an array of all cat IDs we want to display products from 

    SELECT CatId FROM categories WHERE CatParentID = '$CatId'; 
    //we store it to an array 
    //we cannot forget about our Parent category 
    $categories[x]; 

    //we want to create SELECT 
    //now we need to add php code 
    if(sizeof($categories) == 1){ //our parent has 0 childs 
     SELECT ProdName FROM products WHERE CatId = '$CatId'; 
    } else { 
    SELECT ProdName FROM products WHERE CatId = '$CatId' + 
    for($i = 1; $i <= sizeof($categories); $i++) { //I assume we saved our parent to $categories[0] 
     //here you add remaining conditions 
     "OR CatId = '$categories[i]"; 
    } 
     + add last ";" 
    } 
} 

Ich hasse innerjoins:]

Viel Spaß und ich hoffe, dass auch ein guter Programmierer Antworten, so dass wir ein Feedback zu bekommen:]

Verwandte Themen