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

Hitung kedalaman dalam model induk-anak di MySQL

Itu tergantung pada implementasi aktual hierarki Anda dalam database. Jika Anda menggunakan model kumpulan bersarang ( http://mikehillyer.com/articles/managing-hierarchical-data- di-mysql/ ) Anda dapat mengambil jalur lengkap parent-to-child melalui satu pilihan.

Perbarui :Ok, karena Anda menggunakan model daftar adjacency, saya sarankan untuk menyimpan level node dalam tabel. Ini tidak hanya akan memberi Anda kedalaman simpul dalam satu kueri, tetapi juga memungkinkan Anda mengambil seluruh jalur ke simpul itu dalam satu kueri (walaupun kueri itu harus dibuat secara dinamis):

SELECT n1.name AS lvl1, n2.name as lvl2, n3.name as lvl3, ..., nN.name as lvlN
  FROM nodes AS n1
  JOIN nodes AS n2 ON n2.parent_id = n1.id
  JOIN nodes AS n3 ON n3.parent_id = n2.id
  ...
  JOIN nodes AS nN ON nN.parent_id = n(N-1).id
WHERE nN.id = myChildNode;

Karena Anda tahu bahwa simpul Anda berada di level N, tidak perlu gabungan kiri dan, dengan indeks yang sesuai pada id / parent_id, ini seharusnya cukup cepat.
Kelemahan dari pendekatan ini adalah Anda harus menjaga level simpul diperbarui selama pemindahan simpul, tetapi itu harus cukup mudah dan cepat karena Anda hanya akan melakukannya untuk simpul itu sendiri dan turunannya - bukan untuk sebagian besar tabel seperti yang akan Anda lakukan dengan kumpulan bersarang.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan rel saat menginstal mysql2 (mysql2-0,3.20)

  2. Bagaimana saya bisa menggunakan database MySQL dari dua server berbeda di PHP?

  3. MYSQL auto_increment_increment

  4. MySQL Membaca dari aliran gagal

  5. MySQL - mengecualikan semua pengguna yang diblokir dari hasil