Kami sering menghadapi keperluan ini di tempat kerja (terutamanya dalam projek tradisional), iaitu pertanyaan berstruktur pokok (pertanyaan berbilang peringkat termasuk: pertanyaan struktur organisasi (jabatan pengguna) Dan berbilang -pertanyaan menu peringkat
Sebagai contoh, menu dibahagikan kepada tiga peringkat, menu peringkat pertama, menu peringkat kedua dan menu peringkat ketiga Pengguna dikehendaki menanyakan menu pada semua peringkat mengikut struktur pokok. Seperti yang ditunjukkan dalam rajah di bawah
Proses pertanyaan tiga peringkat: tanya pepohon peringkat ketiga, tanya pepohon peringkat kedua mengikut parent_id bagi pepohon peringkat ketiga, dan tanya pepohon peringkat pertama dengan pepohon cara yang sama, pepohon belakang memasang data pepohon dan mengembalikannya ke pepohon hadapan. Pertanyaan berbilang peringkat (tahap tidak tetap/tahapnya sangat mendalam) Dalam kes ini, perkara pertama yang kita fikirkan ialah pertanyaan subkueri atau jadual bersama, tetapi ia tidak boleh digunakan dalam pembangunan sebenar. Semua orang tahu sebabnya: Pernyataan SQL adalah kompleks dan terdedah kepada ralatUntuk tahap tetap dan sebilangan kecil tahap, biasanya 3 tahap, pelaksanaan keperluan adalah sangat mudah level, dan kemudian tanya level atas dalam urutan , dan akhirnya kumpulkan dan kembalikan ke hujung hadapan.
Maka persoalannya ialah, jika bilangan tahap sangat besar, 10 tahap, atau tahap tidak pasti, ada yang 3 tahap, ada 5 tahap, ada 8 tahap, tahap tetap dan bilangan peringkat adalah sama seperti sebelumnya. Berbanding dengan Mari kita panggil ia jadual pokok:
CREATE TABLE tree ( id int not null auto_increment, name varchar(50) not null comment '名称', parent_id int not null default 0 comment '父级id', level int not null default 1 comment '层级,从1开始', created datetime, modified datetime );Salin selepas log masuk
CREATE TABLE tree_depth ( id int not null auto_increment, root_id int not null default 0 comment '根节点(祖先节点)id', tree_id int not null default 0 comment '当前节点id', depth int not null default 0 comment '深度(当前节点 tree_id 到 根节点 root_id 的深度)', created datetime );
Mengikut id nilai treeN, tanya jadual tree_depth untuk mendapatkan id nod akarnya:select * from tree where id = N
Soal semua data cawangan nod semasa tree_depth berdasarkan root_idselect root_id from tree_depth where tree_id = #{treeId}
Soal jadual tree_depth Keluarkan semua nod tree_id semasaselect * from tree_depth where root_id = #{rootId}
dan pasangkan struktur pokok cawangan select * from tree where id in (?,?,?)
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pertanyaan menu berbilang peringkat MySql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!