Mysql
 sql >> база данни >  >> RDS >> Mysql

MySql sql рекурсивен цикъл

Моят фаровски трик за работа с дървовидни структурирани данни в базата данни е добавяне на колона FullID към таблица, за да се избегнат сложни (може би рекурсивни) SQLs/съхранени процедури.

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

Така че, за да намерите идентификатора на основната страница, просто извлечете първата част от FullID чрез SQL или езика на вашето приложение.

Ако използвате SQL, можете да използвате следния SQL, за да получите идентификатора на 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

За да изтриете възел и неговите деца

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

За преместване на възел и неговите деца

-- 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>.%')

Забележка

Този трик се прилага само при ограничени случаи на ниво дърво или FullID не може да задържи дълго съдържание, ако нивото на дървото е твърде дълбоко.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сравнете структурите на две бази данни?

  2. MySQL ODBC Link не успее поради отказа на протокола за удостоверяване

  3. Параметризирани заявки

  4. Вижте дали lat/long попада в полигон, като използвате mysql

  5. Публикувайте и получавайте едновременно в php