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

MySQL tìm tất cả cha mẹ một cách đệ quy

Hãy để tôi cung cấp cho bạn một ý tưởng. Tạo một hàm lấy parent_id từ một ID nhất định một số lần, chúng ta hãy gọi nó là hàm tạo. Cat10 thế hệ 1 sẽ là cha mẹ là CAT5 thế hệ 2 sẽ là CAT3, v.v.

DROP FUNCTION IF EXISTS getNameIdGeneration;
DELIMITER $$
CREATE FUNCTION getNameIdGeneration(idPar int, generationPar int)
  RETURNS VARCHAR(1000) READS SQL DATA
BEGIN
  DECLARE auxLoopVar INT default 0;
  DECLARE parentIdVar INT default idPar;  
  DECLARE nameVar VARCHAR(1000) default NULL;

  count_loop: LOOP    
    SELECT parent_id INTO parentIdVar FROM Category_parent WHERE Category_id = parentIdVar;
    SET auxLoopVar = auxLoopVar + 1;        
    IF auxLoopVar >= generationPar THEN
      LEAVE count_loop;
    END IF;    
  END LOOP;
  SELECT name INTO nameVar FROM Category WHERE id = parentIdVar;

  RETURN nameVar;
END;
$$
DELIMITER ;

giả sử rằng Category_Id cho CAT10 =10 nếu bạn kiểm tra chức năng đã cho

select getNameIdGeneration(10, 2);

CAT3

Bây giờ tất cả những gì bạn cần là một bảng chứa id của CAT mà bạn muốn biết dòng dõi của nó

MariaDB [mydatabase]> select * from test;
+-------------+------------+
| category_id | generation |
+-------------+------------+
|          10 |          1 |
|          10 |          2 |
|          10 |          3 |
+-------------+------------+

MariaDB [mydatabase]> select generation, getNameIdGeneration(category_id, generation) as Name from test;
+------------+------+
| generation | Name |
+------------+------+
|          1 | CAT5 |
|          2 | CAT3 |
|          3 | CAT1 |
+------------+------+
3 rows in set (0.00 sec)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kế thừa lớp với .NET EF4.1 + MySQL

  2. SQL:lặp qua cùng một bảng

  3. Chỉ mục phức hợp có hướng trong MySQL không?

  4. tại sao chúng ta chia một bảng mysql thành nhiều bảng nhỏ hơn?

  5. Cách đối sánh các ký tự rác trong cơ sở dữ liệu mysql với các ký tự tiếng Ả Rập với PHP và MYSQL