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

urutan hierarki pohon sql

Dengan menambahkan kolom jalur dan pemicu, ini dapat dilakukan dengan cukup mudah.

Pertama tambahkan kolom varchar yang akan berisi jalur dari root ke node:

ALTER TABLE category ADD path VARCHAR(50) NULL;

Kemudian tambahkan pemicu yang menghitung jalur saat penyisipan:

(cukup gabungkan id baru dengan jalur induk)

CREATE TRIGGER set_path BEFORE INSERT ON category
  FOR EACH ROW SET NEW.path = 
  CONCAT(IFNULL((select path from category where id = NEW.parent_id), '0'), '.', New.id);

Kemudian cukup pilih order by path:

SELECT name, path FROM category ORDER BY path;

Hasil:

pizza         0.1
piperoni      0.1.4
cheese        0.1.5
extra cheese  0.1.5.7
vegetariana   0.1.6
burger        0.2
coffee        0.3

Lihat biola .

Dengan cara ini biaya perawatan juga minimal. Bidang jalur disembunyikan saat memasukkan dan dihitung melalui pemicu. Menghapus sebuah node tidak memiliki overhead, karena semua anak dari node juga dihapus. Satu-satunya masalah adalah ketika memperbarui parent_id dari sebuah node; Yah, jangan lakukan itu! :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Menghapus Beberapa kunci Asing

  2. Integer panjang ditransformasikan ketika dimasukkan ke dalam kolom yang lebih pendek, tidak terpotong. Mengapa? Apa rumusnya?

  3. Perbedaan antara Dalam database memori dan database memori disk

  4. Bagaimana Anda mengubah jenis pemeriksaan untuk kolom MySQL?

  5. Aktifkan mengeksekusi beberapa pernyataan saat eksekusi melalui sqlalchemy