Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Vòng lặp đệ quy sql MySql

Mẹo farovite của tôi để xử lý dữ liệu có cấu trúc dạng cây trong cơ sở dữ liệu là thêm một cột FullID vào bảng để tránh các SQL phức tạp (có thể đệ quy) / Thủ tục được lưu trữ.

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

Vì vậy, để tìm id trang gốc, chỉ cần trích xuất phần đầu tiên của FullID thông qua SQL hoặc ngôn ngữ ứng dụng của bạn.

Nếu sử dụng SQL, bạn có thể sử dụng SQL sau để lấy id gốc.

-- 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

Để xóa một nút và nút đó là nút con

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

Để di chuyển một nút và nút đó là nút con

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

Lưu ý

Thủ thuật này chỉ được áp dụng cho các trường hợp cấp cây hạn chế hoặc FullID không thể chứa nội dung dài nếu tầng cây quá sâu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi định dạng ngày của Hoa Kỳ sang định dạng ngày ANSI SQL (YYYY-mm-dd)

  2. Sử dụng PHP để thực thi nhiều truy vấn MYSQL

  3. Chọn không có TỪ nhưng có nhiều hơn một hàng

  4. lỗi hoặc lỗi khóa mysql?

  5. Cách phân tích cú pháp dữ liệu từ đối tượng hàng trong node.js, express.js, mysql2