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

Er der et "connect by"-alternativ i MySQL?

Som sagt i kommentarer er der ikke kort vej med mysql.

MEN!

Hvis du har mulighed for at ændre databasestrukturen, kan du implementere et bedre design til at håndtere trælignende hierarkier.

Hvis du følger DENNE TUTORIAL fra Bill Karwin (HER er det originale svar, som refererer til denne diasshow-tutorial), kan du finde 4 metoder, der bruges til at modellere en hierarkisk struktur:

  1. Adiacency List
  2. Stioptælling
  3. Indlejrede sæt
  4. Tabel for lukning

Nu er den bedst mulige model den 4. (jeg overlader beskrivelser af de andre 3 modeller til læseren), som grundlæggende har brug for 2 tabeller:en til elementerne og en til stierne. I stiertabellen (selve lukketabellen) gemmer du hver sti fra hver node til hver efterkommer (ikke kun de direkte underordnede!).

Det foreslås også at gemme stielængden for hver række, fordi det gør det nemmere at forespørge efter umiddelbare børn i træet.

Selvom denne løsning kræver mere plads, har den den bedste overordnede ydeevne, og den er virkelig nem at bruge:den er slet ikke afhængig af rekursive forespørgsler OG den vil give referenceintegritet for hele datasættet!

For eksempel for at få hvert barn af node #4:

select a.*
from nodes a
join paths b
on a.node_id = b.descendant
where b.ancestor = 4

Et andet eksempel:få alle forfædre til noden #11

select a.*
from nodes a
join paths b
on a.node_id = b.ancestor
where b.descendant = 11

nødt til at slette undertræet af node #6

delete from paths where descendant in
(select descendant from paths where ancestor = 6)


  1. Migrering fra MySQL til PostgreSQL

  2. NHibernate IPreUpdateEventListener, IPreInsertEventListener gemmer ikke i DB

  3. C-program mysql-forbindelse

  4. Værktøj til at importere CSV-filer til MySQL-database?