sql >> Database >  >> RDS >> Mysql

Haal de som uit de knooppuntenboom

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.



  1. Fout bij het gebruiken van SET @rownum =0; in PHP

  2. Hoe krijg ik met succes toegang tot de database op een andere computer met behulp van java en jdbc en sql?

  3. Hoe een Drop Table Statement te genereren voor alle tabellen in een database - SQL Server / T-SQL Tutorial Part 48

  4. fatale fout opgetreden tijdens opdrachtuitvoering tijdens update