Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

आदेश sql ट्री पदानुक्रम

पथ कॉलम और ट्रिगर जोड़कर, यह काफी आसानी से किया जा सकता है।

पहले एक वर्चर कॉलम जोड़ें जिसमें रूट से नोड तक का पथ होगा:

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 को अपडेट करना; अच्छा, ऐसा मत करो! :)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP प्रश्न:इन्हें कैसे ठीक करें if/elseif कथन

  2. 80 मिलियन रिकॉर्ड वाली तालिका और एक इंडेक्स जोड़ने में 18 घंटे (या हमेशा के लिए) से अधिक समय लगता है! अब क्या?

  3. डॉकर-लिखें:mysqld:'/ var/lib/mysql/is_writable' फ़ाइल बनाने/लिखने में सक्षम नहीं है (त्रुटि:13 - अनुमति अस्वीकृत)

  4. JQuery अजाक्स के माध्यम से PHP ऐरे पास करें

  5. प्रारूप दिनांक बदल रहा है MySql