पथ कॉलम और ट्रिगर जोड़कर, यह काफी आसानी से किया जा सकता है।
पहले एक वर्चर कॉलम जोड़ें जिसमें रूट से नोड तक का पथ होगा:
ALTER TABLE category ADD path VARCHAR(50) NULL;
फिर एक ट्रिगर जोड़ें जो डालने पर पथ की गणना करता है:
(बस माता-पिता के पथ के साथ नई आईडी को जोड़ता है)
CREATE TRIGGER set_path BEFORE INSERT ON category
FOR EACH ROW SET NEW.path =
CONCAT(IFNULL((select path from category where id = NEW.parent_id), '0'), '.', New.id);
फिर बस पथ द्वारा आदेश चुनें:
SELECT name, path FROM category ORDER BY path;
परिणाम:
pizza 0.1
piperoni 0.1.4
cheese 0.1.5
extra cheese 0.1.5.7
vegetariana 0.1.6
burger 0.2
coffee 0.3
देखें fiddle ।
इस तरह रखरखाव लागत भी न्यूनतम है। पथ फ़ील्ड सम्मिलित करते समय छिपा हुआ है और ट्रिगर के माध्यम से गणना की जाती है। नोड को हटाने का कोई ओवरहेड नहीं है, क्योंकि नोड के सभी बच्चे भी हटा दिए जाते हैं। एक ही समस्या है जब किसी नोड के parent_id को अपडेट करना; अच्छा, ऐसा मत करो! :)पी>