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

Relacja rodzic-dziecko w ramach jednej tabeli

Ponieważ masz skończone 4 poziomy, nie powinieneś potrzebować rekurencji (chociaż przydałoby się używać np. MS SQL CTE).

Coś takiego:

SELECT
  t4.uid as child, 
  --t3.uid as parent,
  --t2.uid as grand_parent,
  --t1.uid as great_grand_parent,
  t1.parentid as great_great_grand_parent
FROM
  your_table_name t1

  inner join your_table_name t2
  on t2.parentid = t1.uid

  inner join your_table_name t3
  on t3.parentid = t2.uid

  inner join your_table_name t4
  on t4.parentid = t3.uin

where 
  t4.uid = '10007' -- your start node.

Jeśli musisz to zrobić dla wielu węzłów, musisz dołączyć to do czegoś, co wybiera węzły początkowe, lub np. zastąpić powyższy WHERE t4.uid = '10007' klauzula, która ma być WHERE t4.uid IN (SELECT DISTINCT uid FROM your_table_name)

Zostało to zrobione odręcznie, więc przepraszam za literówki.




  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 wygenerować losowy przedział czasu i dodać go do daty i godziny mysql za pomocą php?

  2. Mieszanie starego mysql z PDO

  3. Błąd w składni SQL; sprawdź instrukcję, która odpowiada Twojej wersji serwera MySQL

  4. Najlepsze praktyki dotyczące długości kolumny varchar SQL

  5. Mysql wybierz wartości zliczania z jednej kolumny