Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Holen Sie sich die Summe aus dem Knotenbaum

LTREE

Sie sind fast auf dem richtigen Weg. Fast wären Sie über das „LTREE“-System zum Speichern hierarchischer Daten in einer Datenbank gestolpert. Sie müssen nur eine kleine Modifikation vornehmen. das ist alles.

Ihre Tabelle könnte so aussehen:

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

Und Ihre Daten könnten so aussehen.

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

Die Pfadspalte hilft bei der Identifizierung, welches Unternehmen eine Tochtergesellschaft eines anderen Unternehmens ist. Beachten Sie, dass Sie kein allmoney benötigen Säule. Dies wird dynamisch generiert.

Und wie finden Sie all das Geld, das der ersten Firma gehört?

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

Beachten Sie, dass in der von uns erstellten Struktur child1 das übergeordnete Element von child2 ist. Wie finden wir also das Allgeld für Kind1?

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

Es gibt nur eine Abfrage und keine Rekursion.

MPTT

Ein weiterer beliebter Ansatz zum Abrufen hierarchischer Daten ist die Verwendung von Modified Pre Order Tree Traversal. Es gibt einen ausgezeichneten Artikel über Sitepoint seit vielen Jahren, was erklärt, wie dies mit vielen Beispielcodes gemacht wird.