Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Dapatkan jumlah dari pohon node

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana kita bisa menggunakan salah satu validasi di boot musim semi?

  2. Dapatkan daftar tanggal di antara dua tanggal

  3. Ambil dan ubah SQL yang digunakan dalam Tampilan MySQL untuk dieksekusi ulang

  4. Parameter thread_stack server MySQL - apa itu? Seberapa besar seharusnya?

  5. Mysql :membuang database bersama data