Удалите строки Mysql, которые содержат родительские / дочерние объекты, в объекты PHP

#php #mysql #oop

#php #mysql #ооп

Вопрос:

Есть ли у них что-то, что может ‘unflatten’ результаты запроса SQL / MySQL в массив объектов PHP, создавая структуру отношений parent child?

Часто я нахожу, что выполнение запросов к моей базе данных для быстрого получения родительского / дочернего результата необходимо выполнять с помощью двух запросов. Один для захвата родителей, другой для захвата дочерних элементов. Для сложных запросов это иногда может быть немного медленным (даже при правильной индексации и т. Д. На месте).

Гораздо быстрее просто запустить БД одним запросом и получить мои родительские / дочерние данные в одном ответе. Интересно, есть ли общий способ объединить материал вместе, потому что я хотел бы делать это чаще…

Простой пример:

 SELECT CountryID, Country, CityID, City FROM country INNER JOIN city ON city.CountryID = country.CountryID ORDER BY CountryID
 

Результаты запроса:

1, США, 50, Нью-Йорк

1, США, 51, Лас-Вегас

2, Австралия, 52, Сидней

И впоследствии структура объекта будет (я только что вставил ее в формат XML для удобства чтения, чтобы понять структуру объекта, которую я надеюсь достичь):

 <Results>
  <Country ID="1" Name="USA">
   <Children>
    <City ID="50" Name="New York"/>
    <City ID="51" Name="Las Vegas"/>
   </Children>
  <Country ID="2" Name="Australia"/>
   <Children>
    <City ID="52" Name="Sydney"/>
   </Children>
  </Country>
</Results>
 

Я был бы потрясающим, если бы это было возможно, возможно, даже с бесконечной глубиной. т.е. Отношения Parent, Child, ChildChild…

Приветствия, Люк!

Комментарии:

1. Приятной лекции 🙂 sitepoint.com/hierarchical-data-database

2. Вау, это интересно. Интересно, написал ли кто-нибудь аналогичный код для этого, чтобы обернуть типичную структуру базы данных родительского дочернего элемента, а не изменять способ хранения данных. Я думаю, что это вдохновило меня на то, чтобы что-то придумать.

3. 🙂 способ хранения здесь не подходит (по крайней мере, для неизвестной глубины дерева). У вас должна быть линейная таблица со столбцом idParent, который указывает каждому узлу на его родительский элемент. Суть в том, как вы решаете сгенерировать свое дерево в зависимости от ваших потребностей .. рад, что я смог помочь 🙂

4. Спасибо catalin. У меня будет что опубликовать завтра! Какой хороший сайт для обмена классным кодом php?

5. Код, который вы создаете сами и для ideas, SO, в значительной степени в порядке 🙂 вам не нужно получать код, вам нужно изучить базовые методы программирования, и все станет намного проще для вас…