2016-05-05 10 views
1

Ich habe drei Tabellen.So zeigen Sie die Elemente unter einer Unterkategorie in mysql

categorytbl

cat_id cat_name 
    1  Vehicles 
    2  Computers 

subcategorytbl

sub_id  sub_name   sub_parent_id cat_id 
    1   For Rent   0    1 
    2   For Sale   0    1 
    3   Car for Rent  1    1 
    4   Car for Sale  2    1 
    5   Motorcycle for Sale 2    1 
    6   Boat    2    1 
    7   Desktop    0    1 

itemtbl

item_id item_name  sub_id  
    1  Ferrari   3   
    2  Ford    3 
    3  Isuzu    3 
    4  GMC    4 
    5  Uncategorized  2 
    6  Honda    5 

Aus den obigen Tabellen, Ich versuche, die Liste der Elemente, Kinder und Eltern eine Unterkategorie angezeigt werden soll. Das Ergebnis sollte sein:

For Rent(3) 
    Ferrari - car for Rent 
    Ford - Car For Rent 
    Isuzu - Car For Rent 

FOR SALE(3) 
    GMC   - Car for Sale 
    Uncategorized - [empty] 
    Honda   - Motorcycle for Sale 

Hier ist meine SQL-Abfrage:

SELECT COUNT(itemtbl.cat_id) AS cnt, categorytbl.cat_id AS cat_id 
    FROM (
    categorytbl 
    LEFT JOIN itemtbl ON itemtbl.cat_id = categorytbl.cat_id 
    ) 
    LEFT JOIN subcategorytbl ON subcategorytbl.sub_id = itemtbl.sub_id 
    GROUP BY cat_id 
    ORDER BY cnt DESC 
+0

es könnte einfacher sein, etwas davon auf der Anwendungsebene zu tun. Welche Programmiersprache verwenden Sie? – FuzzyTree

+1

@FuzzyTree .. Ich benutze PHP .. – smz

+1

Ich habe es hier aus dieser Frage ausgearbeitet .. http://stackoverflow.com/questions/37021147/how-to-count-the-total-items-under-the- parent-sub-category-in-mysql – smz

Antwort

2

Ich schlage vor, die Datenbank für eine Liste von Elementen und macht die Gruppierung in php mit assoziativen Arrays abfragen. Kommentare unten:

$sql = "select p.sub_name as parent_name, 
s.sub_name, i.item_name 
from itemtbl i 
join subcategorytbl s on s.sub_id = i.sub_id 
join subcategorytbl p on p.sub_id = s.sub_parent_id"; 

$rs = mysqli_query($sql); 
$indexed_results = []; 

// create an associative array where the key is 
// the parent sub i.e. For Rent etc 
// and the value is an array of items 
while($r = mysqli_fetch_assoc($rs)) { 
    $indexed_results[$r['parent_name']][] = $r; 
} 

// now loop through each group and display 
foreach($indexed_results as $parent_name => $results) { 
    print $parent_name . '('.count($results).")\n"; 

    foreach($results as $result) { 
     print $result['item_name'] . ' - ' 
      . $result['sub_name'] . "\n"; 
    } 
} 
Verwandte Themen