sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg finde alle søskende til min node og dens anker i et hierarkisk kategoritræ?

Jeg er ikke sikker på, at jeg følger alt det, men det lyder som om, du vil have alle umiddelbare børn i kategori 5.

Her er en måde at gøre det på:

VÆLG barn.*FRA Kategori forælder JOIN Kategori barn TIL (child.lft MELLEM parent.lft OG parent.rgt) LEFT JOIN Kategori mellemliggende TIL (intermediate.lft> parent.lft OG intermediate.rgt intermediate.lft AND child.rgt

rediger: Okay, jeg forstår nu, at løsningen ovenfor kun er en del af det, du ønsker. Du ønsker:

  • Direkte forfædre til CD-afspillere
  • "onkler" til cd-afspillere (søskende til forfædre)
  • Søskende til CD-afspillere
  • Børn af cd-afspillere

Lad mig arbejde på det i et par minutter.

Her er hvad jeg er kommet frem til:

SELECT descendant.*, (current.lft MELLEM descendant.lft AND descendant.rgt) AS is_selected, COUNT(DISTINCT c.CategoryId) AS depthFROM Category currentJOIN Kategori valgt TIL (current.lft MELLEM valgt.lft select.rgt)JOIN Kategori efterkommer TIL (descendant.lft MELLEM selected.lft OG selected.rgt)VENSTRE JOIN Kategori mellem TIL (intermediate.lft> selected.lft OG intermediate.rgt intermediate.lft OG descendant.lft
  • aktuel er cd-afspillere
  • valgt er forfædre til cd-afspillere (elektronik, bærbar elektronik, cd-afspillere)
  • efterkommer er ethvert barn eller barnebarn osv. af hver valgt forfader
  • mellemliggende er en efterkommer af hver valgte forfader, der også er en forælder til efterkommer -- der må ikke være nogen af ​​disse, derfor ER NULL begrænsning.
  • c er kæden af ​​forfædre fra efterkommer tilbage op til toppen med henblik på at bestemme dybden.

Jeg indså lige, at min løsning også ville returnere alle efterkommere af aktuelle node. Så hvis du i øjeblikket så "bærbar elektronik", ville forespørgslen returnere sine børn, men den ville også returnere barnebarnets "flash", som måske ikke er, hvad du ønsker.



  1. hvordan er smileys kodet i mysql utf-8 mb4 database?

  2. tilslut R til MySQL med RODBC ved hjælp af dsn

  3. Avanceret SQL:Indsæt output fra den parametriserede tabelværdi-funktion i SQL-tabel

  4. Hvordan finder man alle relationerne mellem alle mysql-tabeller?