LTREE
Je bent bijna op de goede weg. Je struikelde bijna over het 'LTREE'-systeem om hiërarchische gegevens in een database op te slaan. U hoeft alleen een kleine wijziging door te voeren. dat is alles.
Uw tabel kan er als volgt uitzien:
CREATE TABLE Table1
(`id` int, `parent_id` int, `name` varchar(13),
`path` char(10),
`money` int)
;
En uw gegevens kunnen er zo uitzien.
(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)
De padkolom helpt te identificeren welk bedrijf een dochteronderneming is van een ander bedrijf. Merk op dat je niet echt een allmoney
. hoeft te hebben kolom. Dit wordt dynamisch gegenereerd.
En hoe vind je al het geld dat van het eerste bedrijf is?
select sum(money) from Table1 where path >= '1' and path < '2'
Merk op dat in de structuur die we hebben gemaakt, child1 de ouder is voor child2. Dus hoe vinden we al het geld voor kind1?
select sum(money) from Table1 where path >= '1.1' and path < '1.2'
Er is maar één zoekopdracht en geen recursie.
MPTT
Een andere populaire benadering voor het ophalen van hiërarchische gegevens is het gebruik van Modified Pre Order Tree Traversal. Er is een uitstekend artikel verschenen op Sitepoint voor vele jaren, wat verklaart hoe dit wordt gedaan met veel voorbeeldcode.