LTREE
Anda hampir berada di jalur yang benar. Anda hampir menemukan sistem 'LTREE' untuk menyimpan data hierarkis dalam database. Anda hanya perlu melakukan sedikit modifikasi. itu saja.
Tabel Anda mungkin terlihat seperti ini:
CREATE TABLE Table1
(`id` int, `parent_id` int, `name` varchar(13),
`path` char(10),
`money` int)
;
Dan data Anda mungkin terlihat seperti ini.
(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)
Kolom jalur membantu mengidentifikasi perusahaan mana yang merupakan anak perusahaan dari perusahaan lain. Perhatikan bahwa Anda sebenarnya tidak perlu memiliki allmoney
kolom. Ini dibuat secara dinamis.
Dan bagaimana Anda menemukan semua uang yang dimiliki perusahaan pertama?
select sum(money) from Table1 where path >= '1' and path < '2'
Perhatikan bahwa dalam struktur yang telah kita buat, anak1 adalah induk dari anak2. Jadi bagaimana kita menemukan semua uang untuk anak1?
select sum(money) from Table1 where path >= '1.1' and path < '1.2'
Hanya ada satu query dan tidak ada rekursi.
MPTT
Pendekatan populer lainnya untuk mengambil data hierarkis adalah menggunakan Traversal Pohon Pra-Pesanan yang Dimodifikasi. Ada artikel bagus di Sitepoint selama bertahun-tahun yang menjelaskan bagaimana hal ini dilakukan dengan banyak contoh kode.