Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL - Czy można uzyskać wszystkie podelementy w hierarchii?

To jest po prostu model przylegania stół? Wtedy nie jest to możliwe w jednym zapytaniu bez znajomości maksymalnej głębokości.

Pożywką do przemyśleń jest Zarządzanie danymi hierarchicznymi w MySQL (chociaż nie zalecam używania Modelu zestawu zagnieżdżonego dla danych, które zmieniają się regularnie).

Przy dużej liczbie (lewych) złączeń, a dokładniej:przy tylu złączach lewych, ile wynosi maksymalna głębokość drzewa, będzie to możliwe w jednym zapytaniu. To jest powód, dla którego wiele osób ma tendencję do zapisywania „głębokości” określonej kategorii, dzięki czemu będziesz mógł filtrować i ograniczać liczbę złączeń do tej samej tabeli do bardziej rozsądnej wartości.

Osobiście, do regularnej zmiany danych:zwykle konfiguruję wyzwalacz przy wstawieniu / aktualizacji, który zapisze / buforuje bieżącą 'ścieżkę' węzła na podstawie identyfikatora (na przykład:ścieżka to '12/62/28/345 ', w którym każdy krok między separatorem / jest kluczem podstawowym węzła nadrzędnego we właściwej kolejności (345 rodzic to 28, rodzic 28 to 62, itd.)), więc mogę zapytać o to za pomocą tylko jednego sprzężenia w ten sposób (/ używany jako 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak szukać ukośnika (\) w MySQL? i dlaczego ucieczka (\) nie jest wymagana dla gdzie (=), ale dla Like jest wymagana?

  2. Rozróżnianie wielkości liter w ograniczeniach „equals id” w ograniczeniach hibernacji

  3. Jak zrobić zbiorcze wstawianie w MySQL?

  4. MySQL (DOMYŚLNIE + PRZY AKTUALIZACJI) ZNACZNIKI CZASOWE

  5. Dlaczego otrzymuję błąd składni podczas używania CAST w MySQL?