SELECT id, FIO, parent_id उपयोगकर्ता से जहां parent_id = (उपयोगकर्ताओं का चयन आईडी जहां parent_id = (SELECT id FROM उपयोगकर्ताओं को WHERE आईडी = 16)) इस प्रकार मैं एक पदानुक्रम पेड़ बना रहा हूं, पहले मूल अभिभावक चुनता हूं, बच्चों की और इतनी गहराई के 24 स्तर पर। < P> सवाल यह है कि: आंतरिक प्रश्नों से एक से अधिक कॉलम कैसे चुनना है?
क्योंकि मुझे अन्य पंक्तियों के खेतों को जानकारी की तरह प्रदर्शित करने की आवश्यकता है: नाम, उपनाम, उम्र ऐसा लगता है कि मैं केवल बाह्य क्वेरी (सबसे ऊपर) में पंक्तियों के उन कॉलमों को प्राप्त कर सकता हूं।
पुनश्च: मैं जुड़ने का उपयोग नहीं करना चाहता क्योंकि वे डुप्लिकेट फ़ील्ड उत्पन्न करते हैं ।
क्या कोई समाधान है?
आप एसक्यूएल पर इस्तेमाल कर सकते हैं MySQL क्वेरी चर यह अपने माता-पिता के नोड के सभी आंकड़ों के साथ अपने आप को दोहराए बिना (और इस प्रकार अपने पेड़ की गहराई पर सीमा को लागू न करने के साथ) सभी को वापस लौटा देगा
ऐसा कुछ: (500 माता-पिता आईडी होने के साथ)
SELECT id, parent_id, नाम, '0' गहराई के रूप में, @tree_ids: = आईडी के रूप में पेड़ से, (SELECT @tree_ids: = '', @depth: = -1) वार्स WHERE आईडी = 500 यूनियन SELECT id, parent_id, name, @depth: = IF (parent_id = 500, 1, @depth + 1) के रूप में गहराई, @tree_ids: = CONCAT (id, ',', @tree_ids) AS foo FROM पेड़ WHERE FIND_IN_SET (parent_id, @tree_ids) या parent_id = 500 देखें
ध्यान दें कि यह बड़े डेटासेट पर एक बहुत खराब प्रदर्शन देता है क्योंकि MySQL आपके अनुक्रमणों का उपयोग नहीं करेगा और बदले में एक पूर्ण तालिका स्कैन करेगा। (मुझे समझ में नहीं आ रहा है कि अनुक्रमित का उपयोग क्यों नहीं किया गया है, तो यह कैसे होता है। अगर किसी को सलाह है कि इंडेक्सिंग इश्यू पर कोई सलाह दी गई हो, कृपया टिप्पणी करें!)
Comments
Post a Comment