#php #mysql #pdo
Есть структура данных в базе
product1 category2
product2 category1
product3 category1
product4 category3
....
Мне необходимо вывести эти данные в select и сгруппировать с помощью optgroup, чтобы
по итогу было как то так
-category1
--product2
--product3
-category2
--product1
-category3
--product4
Я в целом смог сделать подобный вывод
$STH = $DBH->query('SELECT * from product');
$STH->setFetchMode(PDO::FETCH_ASSOC);
$current_category = null;
while($row = $STH->fetch()) {
if ($row["p_category"] != $current_category) {
$current_category = $row["p_category"];
echo "#{$current_category}";
}
echo "{$row["p_name"]}
";
}
Но в данном случае я не могу управлять группой,чтобы заключить ее в Ответы
Ответ 1
Достаточно сортировку добавить в запрос и дополнить условия вывода: $STH = $DBH->query('SELECT * from product ORDER BY p_category, p_name'); $STH->setFetchMode(PDO::FETCH_ASSOC); $current_category = null; echo '';Ответ 2
Если сгруппировать по категориям и воспользоваться GROUP_CONCAT для объединения продуктов для категории, то может получится что-то такое $STH = $DBH->query('SELECT `p_category`, GROUP_CONCAT(p_name) as `products` FROM `product` GROUP BY `p_category`' ); $STH->setFetchMode(PDO::FETCH_ASSOC); while($row = $STH->fetch()) { $current_category = $row["p_category"]; $products = explode(',', $row["products"]); //