sql >> Databáze >  >> RDS >> Mysql

MySQL - Je možné získat všechny podpoložky v hierarchii?

Toto je jen jednoduchý Model sousedství stůl? Pak to v jednom dotazu bez znalosti maximální hloubky nejde.

Námět k zamyšlení je Správa hierarchických dat v MySQL (ačkoli nepodporuji používání modelu vnořené sady pro data, která se pravidelně mění).

S velkým počtem (levých) spojení, přesněji:s tolika levými spojeními, jako je maximální hloubka stromu, to bude možné v jednom dotazu. To je důvod, proč má mnoho lidí tendenci ukládat si 'hloubku' konkrétní kategorie, takže budete moci filtrovat a omezit množství spojení do stejné tabulky na rozumnější množství.

Osobně pro pravidelné změny dat:Mám tendenci konfigurovat spouštěč na vložení / aktualizaci, která uloží / do mezipaměti aktuální 'cestu' uzlu na základě id (například:cesta je '12/62/28/345 ', ve kterém je každý krok mezi oddělovačem / je primární klíč nadřazeného uzlu ve správném pořadí (rodič 345 je 28, rodič 28 je 62 atd.)), takže jej mohu dotazovat pouze jedním spojením takto (/ použito jako oddělovač):

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. Vložte, pokud neexistuje Oracle

  2. Jak používat Coalesce v MySQL

  3. MySQL - Max() vrací špatný výsledek

  4. Prohlášení FORALL s vázanou doložkou INDICES-OF v databázi Oracle