Wyświetlenie produktów w <optgroup> dla kategorii

0
<?php 
	$getDataProducts = $db->prepare("SELECT a.category_name, b.id_product, b.product_name FROM `category` AS `a` JOIN `products` AS `b` ON a.id_category = b.category_id");
	if(!$getDataProducts->execute()){
	    print_r($getDataProducts->errorInfo());
	}
	foreach($getDataProducts as $dataProductContainer){
		echo '<optgroup label="'.$dataProductContainer['category_name'].'">';
		echo '<option value="'.$dataProductContainer['id_product'].'">'.$dataProductContainer['product_name'].'</option>';
		echo '</optgroup>';
	}
?>

Co daje efekt:

Kategoria
Produkt1
Kategoria
Produkt2
Kategoria2
Produkt3
Kategoria3
Produkt4
Kategoria3
Produkt5

Co prawda wyświetlane są produkty dla danej kategorii lecz chciałbym, żeby to wyglądało w ten sposób:

Kategoria
Produkt1
Produkt2
Kategoria2
Produkt3
Kategoria3
Produkt4
Produkt5

Ma ktoś pomysł jak to zrobić?

1
<?php 
    $getDataProducts = $db->prepare("SELECT a.category_name, b.id_product, b.product_name FROM `category` AS `a` JOIN `products` AS `b` ON a.id_category = b.category_id ORDER BY category_name, product_name ");
    if(!$getDataProducts->execute()){
        print_r($getDataProducts->errorInfo());
    }
    $oldCategoryName = "";
    foreach($getDataProducts as $dataProductContainer){
        if ($oldCategoryName != $dataProductContainer['category_name'])
        {
          echo '<optgroup label="'.$dataProductContainer['category_name'].'">';
          $oldCategoryName = $dataProductContainer['category_name'];
        }
        echo '<option value="'.$dataProductContainer['id_product'].'">'.$dataProductContainer['product_name'].'</option>';
        echo '</optgroup>';
    }
?>

edit: WAŻNE! musisz posortować najpierw po category_name inaczej nie zadziała

1 użytkowników online, w tym zalogowanych: 0, gości: 1