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

एक प्रभावी और आसान तरीके से पदानुक्रम, माता-पिता/बच्चे के रिश्ते को प्राप्त करें

दुर्भाग्य से, यदि आप डेटा मॉडल नहीं बदल सकते हैं, और आप MySQL का उपयोग कर रहे हैं, तो आप ऐसी स्थिति में फंस गए हैं जहाँ आपको पुनरावर्ती प्रश्नों की आवश्यकता है और आप एक DBMS का उपयोग कर रहे हैं जो पुनरावर्ती प्रश्नों का समर्थन नहीं करता है।

क्वास्नोई ने ब्लॉग लेखों की एक दिलचस्प श्रृंखला लिखी, जिसमें पदानुक्रमित डेटा को क्वेरी करने की तकनीक दिखाई गई। उनके समाधान काफी चतुर हैं, लेकिन बहुत जटिल हैं।http:// clearextended.com/2009/03/17/hierarchical-queries-in-mysql/

PostgreSQL एक अन्य ओपन-सोर्स RDBMS है, जो पुनरावर्ती प्रश्नों का समर्थन करता है। ए> , ताकि आप अपने दिखाए गए तरीके से संग्रहीत एक पूरा पेड़ ला सकें। लेकिन अगर आप डेटा मॉडल नहीं बदल सकते हैं, तो मैं मान सकता हूं कि आप किसी दूसरे RDBMS पर स्विच नहीं कर सकते।

कई वैकल्पिक डेटा मॉडल हैं जो मनमाने ढंग से गहरे पेड़ों को लाना बहुत आसान बनाते हैं:

  • क्लोजर टेबल
  • नेस्टेड सेट उर्फ ​​संशोधित प्रीऑर्डर ट्री ट्रैवर्सल
  • पथ गणना उर्फ ​​भौतिक पथ

मैं इन्हें अपनी प्रस्तुति में शामिल करता हूं SQL और PHP के साथ पदानुक्रमित डेटा के लिए मॉडल , और मेरी पुस्तक में SQL एंटीपैटर्न:डेटाबेस प्रोग्रामिंग के नुकसान से बचना

अंत में, एक और समाधान है जिसे मैंने Slashdot के कोड में उपयोग करते हुए देखा है। , उनकी टिप्पणियों के पदानुक्रम के लिए:वे "parent_id" को जैसे कि Adjacency List में स्टोर करते हैं, लेकिन वे एक "root_id" कॉलम भी स्टोर करते हैं। किसी दिए गए पेड़ के प्रत्येक सदस्य का root_id के लिए समान मान होता है, जो उसके पेड़ में उच्चतम पूर्वज नोड है। फिर एक प्रश्न में पूरे पेड़ को लाना आसान है:

SELECT * FROM site WHERE root_id = 123;

फिर आपका एप्लिकेशन डेटाबेस से सभी नोड्स को एक सरणी में वापस लाता है, और आपको इस सरणी पर लूप को कोड लिखना होगा, नोड्स को मेमोरी में ट्री डेटा स्ट्रक्चर में डालना होगा। यह एक अच्छा समाधान है यदि आपके पास कई अलग-अलग पेड़ हैं, और प्रत्येक पेड़ में अपेक्षाकृत कम प्रविष्टियां हैं। यह स्लैशडॉट के मामले के लिए अच्छा है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में किसी संख्या को Octal में बदलने के 2 तरीके

  2. MySQL डेटाबेस में दृश्यों का उपयोग कैसे करें

  3. लिनक्स में MySQL के प्रदर्शन की निगरानी के लिए dbWatch कैसे स्थापित करें

  4. node.js async/MySQL के साथ उपयोग करने की प्रतीक्षा करें

  5. मैं PHP में पूर्णांक और संख्यात्मक के रूप में MySQL से पूर्णांक और संख्यात्मक कॉलम कैसे वापस कर सकता हूं?