आइए मैं आपको एक आइडिया देता हूं। एक फ़ंक्शन बनाएं जो किसी दिए गए आईडी से कई बार parent_id प्राप्त करता है, चलिए इसे जनरेशन कहते हैं। Cat10 पीढ़ी 1 माता-पिता होगी जो CAT5 पीढ़ी 2 CAT3 होगी और इसी तरह।
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 ;
यह मानते हुए कि CAT10 =10 के लिए श्रेणी_आईडी यदि आप दिए गए फ़ंक्शन का परीक्षण करते हैं
select getNameIdGeneration(10, 2);
CAT3
अब आपको केवल एक टेबल चाहिए जिसमें उस कैट की आईडी हो, जिसे आप उसके वंश को जानना चाहते हैं
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)