Как создать список разделенный по классам?

Есть таблица:
6236bcd60251d700981237.jpeg
Есть задача - автоматическое создание списка с разделением на классы и подклассы Примерно такой:
6235b27fb86e6613305015.jpeg
Как это можно реализовать (если возможно)?

P.S. По совету из комментариев "вручную" написал код PHP. Код работает. Он таков:
<?php
// подключение к MySQL
$podkluchenie = new mysqli("localhost", "login", "parol", "bazadannih");
// находим какие классы есть
$zapros = $podkluchenie->query("SELECT DISTINCT klass FROM `date` ORDER BY klass");
// запоминаем их
$date = mysqli_fetch_all($zapros);
// делаем с ними цикл
foreach ($date as $klassdate)
{
$klass = $klassdate[0];
// выводим на экран класс
?><p class="p1"><b><?=$klass?></b></p><?php
// находим какие подклассы есть
$zaprosnew = $podkluchenie->query("SELECT DISTINCT `podklass` FROM `date` WHERE `klass` = '$klass' ORDER BY podklass");
$datenew = mysqli_fetch_all($zaprosnew);
    // цикл с подклассами
    foreach ($datenew as $podklassdate) 
    {$podklass = $podklassdate[0];
    // выводим на экран подкласс
    ?><p class="p2"><?= $podklass?></p><?php
    // находим какие предметы с нужными классами и подклассами есть
    $zaprosesheraz = $podkluchenie->query("SELECT * FROM `date` WHERE `klass` = '$klass' AND `podklass` = '$podklass' ORDER BY name");
    $dateesheraz = mysqli_fetch_all($zaprosesheraz);
        foreach ($dateesheraz as $namedate)
        // выводим на экран имена
        { ?><p class="p3"><?=$namedate[1]?></p><?php 
        }; 
    };
}

?>

/* добавляем стиль */
<style>
    .p1 {color: #FF0000; padding-left: 0px}
    .p2 {color: #0000FF; padding-left: 15px}
    .p3 {color: #000000; padding-left: 30px}
</style>
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
@Akela_wolf
Extreme Programmer
ORDER BY klass, podklass отсортирует так что будут овощи, затем фрукты. А строить вот такую древовидную структуру MySQL не умеет, придется это делать вручную на PHP
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Для начала правильно спроектировать таблицы:
create table class (
	id int primary key auto_increment,
  	name varchar(64) unique key
);

create table subclass (
	id int primary key auto_increment,
  	class_id int references class(id),
  	name varchar(64) unique key
);

create table items (
	id int primary key auto_increment,
    subclass_id int references subclass(id),
  	name varchar(64) unique key
);

insert into class (name) values ('Fruits'), ('Vegetables');

insert into subclass (class_id, name) values (1, 'Red'), (1, 'Orange'), (2, 'Green'), (2, 'Yellow');

insert into items (subclass_id, name) values
(1, 'Apple'), (2, 'Pineapple'), (3, 'Cucumber'), (3, 'Carrot');


Затем написать код PHP:
<?php
$query = 'select class.name class, subclass.name subclass, items.name item
from items 
join subclass on items.subclass_id = subclass.id
join class on subclass.class_id = class.id;';

// get DB version using PDO
$stmt = $pdo->prepare($query);
$stmt->execute();

$res = [];

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    if (!isset($res[$row["class"]])) {
        $res[$row["class"]] = [];
    }
    if (!isset($res[$row["class"]][$row["subclass"]])) {
        $res[$row["class"]][$row["subclass"]] = [];
    }
    $res[$row["class"]][$row["subclass"]][] = $row["item"];
}

print_r(json_encode($res,  JSON_PRETTY_PRINT));


Проверить код PHP online
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
у тебя не верна сама структура - сделай 4 таблицы: сущности(огурец, кабачок и т.д), свойства(цвет, тип), значения свойств(синий, красный, овощ) и наконец таблицу свойства сущностей: id сущности, id значения свойства.

Выбираешь значения свойств объединив с таблицей свойств и сущностей для получения имен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы