Я немного изменил ваш код:
$productQ = "SELECT * FROM products_tbl ORDER BY ProductCategory ASC";
try {
$stmt2 = $db->prepare($productQ);
$stmt2->execute();
} catch(PDOException $ex) {
die("Failed to run Query: " . $ex->getMessage());
}
$produtsrows = $stmt2->fetchAll();
echo"<select>";
$category = "";
foreach($produtsrows as $prow):
if ($category != $prow['ProductCategory']) {
if ($category != "") {
echo "</optgroup>";
}
$category = $prow['ProductCategory'];
echo "<optgroup label=".$prow['ProductName'].">";
}
echo" <option>".$prow['ProductName']."</option>
endforeach;
echo "</optgroup>
</select>
";
Сначала обратите внимание, что я добавил ORDER BY ProductCategory ASC
, чтобы убедиться, что все товары одной категории всегда вместе.
Далее я Добавляю метку <optgroup>
только тогда, когда категория отличается от предыдущего элемента.
Обратите внимание, что я предполагаю, что все продукты имеют допустимую категорию. Если у вас есть пустые категории, полученный html будет испорчен.