powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Привести выборку к дереву
7 сообщений из 7, страница 1 из 1
Привести выборку к дереву
    #39596593
Дормедонт Евлампиевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть несколько таблиц:
A) id, name...
B) id, A_id, name,
C) id, B_id, name

количество таблиц и колонок в них может быть разное

Допустим получаю выборку из такого запроса:
Код: sql
1.
2.
3.
select A.id, A.name, B.id, B.name, C.id, C.name from A
join B on A.id = B.A_id
join C on B.id = C.B_id



как на PHP из неё получить многоуровневый массив, чтоб его можно было привести в json и получить что-то подобное:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
[
  {
    "id":1,
    "name": "asdasd",
    "B": [
      {
        "id: 33,
        "name": "ghfghfgh",
        "C": [
          {
            "id": 77,
            "name": "hfghfgh"
          },
          {
            "id": 887,
             "name": "nbmbnm"
          }
        ]
      }
    ]
  }
]

                  
      

]
...
Рейтинг: 0 / 0
Привести выборку к дереву
    #39596738
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дормедонт Евлампиевич,
тут не мешало бы привести результат выборки, из которой уже получается дерево...

На всякий случай 20173267
...
Рейтинг: 0 / 0
Привести выборку к дереву
    #39596793
Дормедонт Евлампиевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примерная выборка
Код: sql
1.
2.
1, "asdasd", 33, "ghfghfgh", 77, "hfghfgh"
1, "asdasd", 33, "ghfghfgh", 887, "nbmbnm"



Спасибо за ваш пример. Вопрос по нему, а что если у fio будут другие свойства на уровне mainProject ?
...
Рейтинг: 0 / 0
Привести выборку к дереву
    #39596796
Дормедонт Евлампиевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по сути, у меня тут паттерн "Компоновщик", т.е. в дереве могут быть как листья, так и ветки..
...
Рейтинг: 0 / 0
Привести выборку к дереву
    #39597017
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дормедонт ЕвлампиевичСпасибо за ваш пример. Вопрос по нему, а что если у fio будут другие свойства на уровне mainProject ?Посмотрите fio = Петров

Дормедонт Евлампиевичпо сути, у меня тут паттерн "Компоновщик", т.е. в дереве могут быть как листья, так и ветки..сложно сказать. У меня здесь не привычное дерево Parent-Child, а именно группировка, которая даёт структуру, похожую на дерево. Данные надо отсортировать или на сервере или на PHP (надо сравнить по скорости). А потом уже примените мой алгоритм, может чуть поправите...
...
Рейтинг: 0 / 0
Привести выборку к дереву
    #39597025
Дормедонт Евлампиевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLPowerUserПосмотрите fio = Петров


У Петрова в колонке mainProject несколько значений.

Мой вопрос был в том, что случится, если будет несколько колонок..
...
Рейтинг: 0 / 0
Привести выборку к дереву
    #39599354
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Структуру дерева лучше хранить в отдельной таблице, а сами записи в другой (или в других). Очень маловероятно что тебе нужна именно такая архитектура БД, которая получилась (думаю ещё со многими проблемами из-за неё столкнёшься).

При такой структуре БД легче считать все 3 таблицы по одной и собрать их в многоуровневый массив уже на пыхе (через обычный foreach, при желании рекурсивно). Так можно будет нужный массив сделать даже когда у тебя будет 100 таблиц.

Но ещё раз повторю, что сильно не рекомендую оставлять БД такой, если есть возможность её пересобрать правильно :)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Привести выборку к дереву
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]