sql >> Databáze >  >> RDS >> Mysql

Získejte součet ze stromu uzlů

LTREE

Jste téměř na správné cestě. Téměř jste narazil na systém 'LTREE' ukládání hierarchických dat do databáze. Jen je potřeba provést drobnou úpravu. to je vše.

Vaše tabulka může vypadat takto:

CREATE TABLE Table1
    (`id` int, `parent_id` int, `name` varchar(13),
     `path` char(10),
     `money` int)
;

A vaše data mohou vypadat takto.

(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)

Sloupec cesta pomáhá identifikovat, která společnost je dceřinou společností jiné společnosti. Všimněte si, že ve skutečnosti nepotřebujete mít allmoney sloupec. Toto se generuje dynamicky.

A jak najdete všechny peníze, které patří první společnosti?

select sum(money) from Table1 where path >= '1' and path < '2'

Všimněte si, že ve struktuře, kterou jsme vytvořili, je child1 rodičem child2. Jak tedy najdeme všechny peníze pro dítě1?

select sum(money) from Table1 where path >= '1.1' and path < '1.2'

Existuje pouze jeden dotaz a žádná rekurze.

MPTT

Dalším oblíbeným přístupem pro načítání hierarchických dat je použití Modified Pre Order Tree Traversal. Na webu Sitepoint byl vydán skvělý článek po mnoho let, což vysvětluje, jak se to dělá se spoustou ukázkových kódů.



  1. Vynucení indexu v orákulu

  2. Výběr náhodných řádků pomocí MySQL

  3. 2 Funkce, které v MySQL vracejí název měsíce z data

  4. Jaký je rozdíl mezi VARCHAR a CHAR?