Bei der Arbeit stoßen wir häufig auf diesen Bedarf (insbesondere in traditionellen Projekten), bei dem es sich um baumstrukturierte Abfragen (mehrstufige Abfragen) handelt. Zu den häufigsten Szenarien gehören: Organisationsstruktur (Benutzerabteilung). Abfrage und mehrstufige Menüabfrage
Zum Beispiel ist das Menü in drei Ebenen unterteilt: Menü der ersten Ebene, Menü der zweiten Ebene und Menü der dritten Ebene. Der Benutzer muss die Menüs abfragen auf allen Ebenen entsprechend der Baumstruktur. Wie in der Abbildung unten gezeigt
Für feste Ebenen und eine kleine Anzahl von Ebenen, im Allgemeinen 3 Ebenen, ist die Anforderung sehr einfach zu erfüllen Implementieren Sie zuerst die kleinste untergeordnete Ebene, fragen Sie dann nacheinander die obere Ebene ab und bauen Sie sie schließlich zusammen und geben Sie sie an das Frontend zurück.
Dann ist die Frage, ob die Anzahl der Ebenen sehr groß ist, 10 Ebenen, oder ob die Ebenen einfach unsicher sind, einige sind 3 Ebenen, einige sind 5 Ebenen, einige sind 8 Ebenen, sie sind festgelegt Bei den vorherigen Ebenen sind die Ebenen offensichtlich komplizierter. Schauen wir uns an, wie wir damit umgehen. In diesem Fall benötigen wir nur eine Tabelle, nennen wir sie eine Baumtabelle: #🎜 🎜#
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 );Der Abfrageprozess der dritten Ebene: Fragen Sie den Baum der dritten Ebene ab und fragen Sie den Baum der zweiten Ebene basierend auf der parent_id des Baums der dritten Ebene ab abgefragt, und das Backend stellt die Baumdaten zusammen und gibt sie an das Frontend zurück.
In diesem Fall denken wir zuerst an eine Unterabfrage oder eine gemeinsame Tabelle Abfrage, was aber in der Praxis nicht möglich ist. In der Entwicklung verwendet, kennt jeder den Grund:
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 );
Das Tiefenfeld in der Tabelle stellt Folgendes dar: die Tiefe vom aktuellen Knoten „tree_id“ bis zum Wurzelknoten „root_id“, nicht die Tiefe des gesamten Zweigs, in dem sich der aktuelle Knoten befindet. Die Tiefe aller Knoten relativ zu sich selbst ist 0
Den gesamten Baum durchqueren:
# 🎜🎜#Überprüfen Sie direkt alle Ebenen = 1 in den Baumknoten und überprüfen Sie dann die Knoten der unteren Ebene basierend auf der parent_id basierend auf den IDs dieser Knoten. Nachdem Sie alle Knoten abgefragt haben, können Sie ein vollständiges Baumdiagramm zusammenstellen und zurückgeben zum Frontend Knotensuche (diesen Knoten finden Der gesamte Zweig, in dem er sich befindet) Fragen Sie den KnotenbaumN aus der Baumtabelle abselect * from tree where id = N
#🎜🎜 #
select root_id from tree_ Depth where tree_id = #{treeId} code><li><p><br><code>select * from tree where id = N
根据 treeN 的 id 值,到 tree_depth 表查询出它的 根节点id:select root_id from tree_depth where tree_id = #{treeId}
根据 root_id 查询 tree_depth 的 所有当前节点分支数据select * from tree_depth where root_id = #{rootId}
从查询出 tree_depth 表数据中取出所有当前节点 tree_idselect * from tree where id in (?,?,?)
Fragen Sie alle aktuellen Knotenzweigdaten von ab Baumtiefe basierend auf Root_ID
wählen Sie * aus Baumtiefe aus, wobei Root_id = #{rootId}
wählen Sie * aus dem Baum aus, in dem sich die ID befindet (?,?,?)
Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine mehrstufige MySql-Menüabfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!