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

lấy một danh sách cha đệ quy

Ở đây, tôi đã tạo một chức năng nhỏ cho bạn, tôi đã kiểm tra nó trong cơ sở dữ liệu của mình (MAMP) và nó hoạt động tốt

use mySchema;
drop procedure if exists getParents;

DELIMITER $$
CREATE PROCEDURE getParents (in_ID int)
BEGIN
DROP TEMPORARY TABLE IF EXISTS results;
DROP TEMPORARY TABLE IF EXISTS temp2;
DROP TEMPORARY TABLE IF EXISTS temp1;

CREATE TEMPORARY TABLE temp1 AS
  select distinct ID, parentID
    from tasks
    where parentID = in_ID;

create TEMPORARY table results AS
  Select ID, parentID from temp1;

WHILE (select count(*) from temp1) DO
  create TEMPORARY table temp2 as
    select distinct ID, parentID 
      from tasks 
      where parentID in (select ID from temp1);

  insert into results select ID, parentID from temp2;
  drop TEMPORARY table if exists temp1;
  create TEMPORARY table temp1 AS
    select ID, parentID from temp2;
  drop TEMPORARY table if exists temp2;

END WHILE;


select * from results;

DROP TEMPORARY TABLE IF EXISTS results;
DROP TEMPORARY TABLE IF EXISTS temp1;

END $$
DELIMITER ;

mã này sẽ trả về tất cả các bậc cha mẹ về bất kỳ độ sâu nào. bạn rõ ràng có thể thêm bất kỳ trường bổ sung nào vào kết quả

sử dụng nó như thế này

call getParents(9148)

ví dụ



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cây phả hệ mysql

  2. mysql mất quá nhiều thời gian để chèn hàng

  3. Meteor with mysql

  4. Lỗi:Cài đặt PHP của bạn dường như thiếu tiện ích mở rộng MySQL được WordPress yêu cầu

  5. TRÊN thực hiện / thiết kế CẬP NHẬT KEY DUPLICATE