sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Är det möjligt att få alla underobjekt i en hierarki?

Det här är bara en Adjacency Model tabell? Då är det inte möjligt i en fråga utan att veta det maximala djupet.

Att tänka på är hantera hierarkisk data i MySQL (även om jag inte förespråkar att man använder Nested Set Model för data som ändras regelbundet).

Med många (vänster) kopplingar, mer specifikt:med så många kopplingar till vänster som trädets maximala djup kommer det att vara möjligt i en fråga. Detta är anledningen till att många människor tenderar att spara "djupet" för en specifik kategori, så du kommer att kunna filtrera och begränsa antalet anslutningar till samma tabell till en mer förnuftig mängd.

Personligen, för att regelbundet ändra data:Jag tenderar att konfigurera en trigger på en infogning / uppdatering, som sparar / cachelagrar den aktuella 'sökvägen' för en nod baserat på id:s (till exempel:en sökväg är '12/62/28/345 ', där varje steg mellan avgränsaren / är primärnyckeln för en överordnad nod i rätt ordning (345:s överordnade är 28, 28:s överordnade är 62, etc.)), så jag kan fråga den med bara en koppling så här (/ används som separator):

SELECT j.*
FROM tablename o
JOIN tablename j
WHERE j.path LIKE CONCAT (o.path,'/%')
AND  j.id != o.id  -- skip parent asked for.
WHERE o.id = <the id of the node you're looking for>;



  1. jquery för att fylla flera nedrullningsbara listor från databasen

  2. ADO- och msqli-anslutningar mycket långsamma

  3. Enkel parametrering och triviala planer — Del 1

  4. Hämta Insert Statement för befintlig rad i MySQL