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

MySQL:माता-पिता से कैसे पूछताछ करें?

यहाँ एक विचार है। लेकिन यह आपके डेटा के सेटअप के तरीके के बारे में बहुत सी धारणाओं पर आधारित है। पेड़ के नीचे लगातार बढ़ती हुई आईडी, केवल दो स्तर, आदि।

SELECT f.foo_id,f.foo_parent_id FROM foo f
foo f

--मुझे parent_ids की शीर्ष X संख्या दें(यह अच्छा है, आप दिखाने के लिए अभिभावक स्तरों की संख्या को बदलने के लिए LIMIT 10 को समायोजित करें)

INNER JOIN 
(select foo_id from foo where foo_parent_id is null order by foo_parent_id 
LIMIT 10
) top_foo_parent
      on isnull(f.foo_parent_id,f.foo_id) = top_foo_parent.foo_id
WHERE

(यह हिस्सा एक तरह से हैकी है, क्योंकि आपको पिछले दो बच्चों को पाने के लिए इनमें से एक लंबी स्ट्रिंग डालनी होगी)

--यह पहला बच्चा है, या...

(f.foo_id in (select MIN(foo_id) from foo fc1 where fc1.foo_parent_id =f.foo_parent_id)
 )
 or

--यह दूसरा बच्चा है, या...

(f.foo_id in (select MIN(foo_id) from foo fc1 where fc1.foo_parent_id =f.foo_parent_id  and fc1.foo_id not in (select MIN(foo_id) from foo fc2 where fc2.foo_parent_id=f.foo_parent_id))
 )
 or 

--यह जनक है

 f.foo_parent_id is null
order by isnull(f.foo_parent_id,f.foo_id)*100 + f.foo_id

तो हम यहां जो कर रहे हैं वह मूल रूप से parent_id कॉलम द्वारा ऑर्डर कर रहा है और फिर उसके नीचे के बाल कॉलम थोड़े मोड़ के साथ हैं। यदि पैरेंटिड कॉलम NULL है तो हम वास्तविक आईडी का उपयोग करते हैं। इसका मतलब है कि ऑर्डर देने के लिए हमारी टेबल इस तरह दिखती है:

==============================================================================
| foo_id | foo_parent_id |   isnull(f.foo_parent_id,f.foo_id)
==============================================================================
| 1      | NULL           |         (1)
| 2      | NULL           |         (2)
| 3      |  1             |         1
| 4      |  2             |         2
| 5      |  1             |         1
| 7      |  2             |         2
----------------------------------------------------------------------

फिर हम उस ऑर्डरिंग कॉलम को गुणा करते हैं *100

==============================================================================
| foo_id | foo_parent_id |   isnull(f.foo_parent_id,f.foo_id)*100
==============================================================================
| 1      | NULL           |         100
| 2      | NULL           |         200
| 3      |  1             |         100
| 4      |  2             |         200
| 5      |  1             |         100
| 7      |  2             |         200
----------------------------------------------------------------------

और अंत में हम इसमें अपना foo_id कॉलम जोड़ते हैं

==============================================================================
| foo_id | foo_parent_id |   isnull(f.foo_parent_id,f.foo_id)*100 + foo_id
==============================================================================
| 1      | NULL           |         101
| 2      | NULL           |         202
| 3      |  1             |         103
| 4      |  2             |         204
| 5      |  1             |         105
| 7      |  2             |         207
----------------------------------------------------------------------

अब हम टेबल को उस वर्चुअल कॉलम के आधार पर ऑर्डर करते हैं और...

==============================================================================
| foo_id | foo_parent_id |   ORDER BY isnull(f.foo_parent_id,f.foo_id)*100 + foo_id
==============================================================================
| 1      | NULL           |         101
| 3      |  1             |         103
| 5      |  1             |         105
| 2      | NULL           |         202    
| 4      |  2             |         204
| 7      |  2             |         207
----------------------------------------------------------------------

वहाँ हम जाते हैं!



  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 में संग्रहित प्रक्रियाओं का बैकअप कैसे लें

  2. पायथन के साथ SQL डेटाबेस कैसे बनाएं और हेरफेर करें

  3. कैल्डेकॉट स्थापित करने में त्रुटि

  4. चेतावनी:mysqli ::mysqli ():(HY000/1045):उपयोगकर्ता 'डेटाबेस' @ 'लोकलहोस्ट' (पासवर्ड का उपयोग करके:नहीं) के लिए प्रवेश निषेध

  5. इकाई विशेषता मान मॉडल - प्रदर्शन विकल्प?