LTREE
Jesteś prawie na dobrej drodze. Prawie natknąłeś się na system przechowywania danych hierarchicznych w bazie danych „LTREE”. Wystarczy dokonać niewielkiej modyfikacji. to wszystko.
Twój stół może wyglądać tak:
CREATE TABLE Table1
(`id` int, `parent_id` int, `name` varchar(13),
`path` char(10),
`money` int)
;
Twoje dane mogą wyglądać tak.
(1, 0, 'company 1', '1', 10),
(2, 1, 'child 1', '1.1', 10),
(3, 2, 'child 2', '1.1.1', 10),
(4, 1, 'child 3', '1.2', 10,),
(4, 1, 'company 2', '2', 10),
(4, 1, 'child 2.1', '2.1', 10)
Kolumna Ścieżka pomaga określić, która firma jest spółką zależną innej firmy. Zauważ, że tak naprawdę nie musisz mieć allmoney
kolumna. To jest generowane dynamicznie.
A jak znaleźć wszystkie pieniądze należące do pierwszej firmy?
select sum(money) from Table1 where path >= '1' and path < '2'
Zauważ, że w utworzonej przez nas strukturze child1 jest rodzicem child2. Jak więc znaleźć wszystkie pieniądze dla dziecka1?
select sum(money) from Table1 where path >= '1.1' and path < '1.2'
Jest tylko jedno zapytanie i nie ma rekurencji.
MPTT
Innym popularnym podejściem do pobierania danych hierarchicznych jest użycie zmodyfikowanego przechodzenia przez drzewo zamówień w przedsprzedaży. Pojawił się doskonały artykuł na temat Sitepoint od wielu lat, co wyjaśnia, jak to się robi z dużą ilością przykładowego kodu.