Mam comments
tabelę, którą można uprościć do tego stopnia :
comments
=======
id
user_id
text
parent_id
gdzie parent_id
jest zerowalne, ale może być kluczem do jego komentarza nadrzędnego.
Jak mogę teraz select
wszystkich potomków określonego komentarza?
Komentarze mogą być kilka poziomów niżej ...
źródło
Ten projekt tabeli jest antipatternem SQL „Naiwne drzewa”, jak opisał Bill Karwin (patrząc od slajdu 48 w swojej prezentacji SQL Antipatterns Strike Back ). Problemem w tym projekcie jest w szczególności trudność w uzyskaniu wszystkich potomków (lub rodziców) węzła. Ponieważ używasz MySQL, nie możesz używać wspólnych wyrażeń tabelowych (instrukcja WITH i jej modyfikator RECURSIVE) obecnych w innych RDBMS.
Pozostało ci:
buduj zapytania z własnym łączeniem z limitem głębokości. Dla głębokości = 5 możesz użyć czegoś w liniach:
użyj RDBMS, który obsługuje Z NAGRYWANIEM (chociaż najprawdopodobniej nie jest to opcja dla większości osób)
źródło
MySQL nie obsługuje zapytań rekurencyjnych, takich jak te, których potrzebujesz.
To, co zrobiłem jakiś czas temu, to napisanie Procedur składowanych, które zapewniają model do tego.
Zamiast ponownie wymyślić koło, dam ci linki do moich poprzednich postów na ten temat:
Oct 24, 2011
: Znajdź najwyższy poziom pola hierarchicznego: z vs bez CTEDec 10, 2012
: MySQL: Hierarchiczne zapytanie drzewaApr 12, 2013
: Zapytanie rekurencyjne w mysqlKrótko mówiąc, wykonane przeze mnie Procedury przechowywane wykonują przechodzenie drzewa przed kolejnością przy użyciu przetwarzania kolejek
GetParentIDByID
GetAncestry
GetFamilyTree
Nadrzędny dla wszystkich dzieci (jak procedura przechowywana GetFamilyTree)
parent_id
w kolejceparent_id
jako bieżącąid
wartości, które mają prądparent_id
STEP02
Dziecko do wszystkich rodziców (jak procedura przechowywana GetAncestry)
id
w kolejceid
jako bieżącąparent_id
wartość prąduid
STEP02
Przejrzyj Procedury przechowywane w moich innych postach, aby zobaczyć wdrożenie.
Spróbuj !!!
źródło
skrzypce
źródło