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

Rekurencyjna pętla MySql sql

Moja sztuczka Farovit do obsługi danych o strukturze drzewa w bazie danych polega na dodaniu kolumny FullID do tabeli, aby uniknąć złożonych (najprawdopodobniej rekurencyjnych) instrukcji SQL/procedur składowanych.

FullID     id  parent   name
-----------------------------
1          1   null     root1
2          2   null     root2
2.3        3   2        home
2.3.4      4   3        child
2.3.4.5    5   4        sub_child
2.3.4.5.6  6   5        sub_sub_child

Aby znaleźć identyfikator strony głównej, po prostu wyodrębnij pierwszą część FullID przez SQL lub język aplikacji.

Jeśli używasz SQL, możesz użyć następującego SQL, aby uzyskać identyfikator root.

-- MySQL dialect
select substring_index(FullID,'.',1) as RootID from table;

-- SQL Server dialect
select case charindex('.', FullID) when 0 then FullID else substring(FullID, 1, charindex('.', FullID)-1) end as RootID from table

Aby usunąć węzeł i jego dzieci

DELETE table WHERE id=<CURRENT_NODE_ID> OR FullID LIKE '<CURREN_NODE_FULLID>.%'

Aby przenieść węzeł i jego dzieci

-- change the parent of current node:
UPDATE table
SET parent=<NEW_PARENT_ID>
WHERE id=<CURRENT_NODE_ID>

-- update it's FullID and all children's FullID:
UPDATE table
SET FullID=REPLACE(FullID,<CURRENT_NODE_PARENT_FULLID>, <NEW_PARENT_FULLID>)
WHERE (id=<CURRENT_NODE_ID> OR FullID LIKE '<CURRENT_NODE_FULLID>.%')

Uwaga

Ta sztuczka jest stosowana tylko w ograniczonych przypadkach na poziomie drzewa lub FullID nie może pomieścić długiej zawartości, jeśli poziom drzewa jest zbyt głęboki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy lewe sprzężenia zewnętrzne i lewe sprzężenia są takie same?

  2. Django odrębne grupowanie według zapytania na dwóch polach

  3. Wysyłasz e-maile do użytkowników Yahoo i Hotmail?

  4. Zaimportować XML z treścią określoną jako atrybuty do tabeli MySQL?

  5. php mysql wyszukiwanie pełnotekstowe:lucene, sfinks, czy?