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

MySql sql पुनरावर्ती लूप

डेटाबेस में ट्री स्ट्रक्चर्ड डेटा को संभालने के लिए मेरी फ़ारोवाइट ट्रिक एक कॉलम है FullID तालिका में जटिल (शायद पुनरावर्ती) एसक्यूएल/संग्रहीत प्रक्रियाओं से बचने के लिए।

FullID     id  parent   name
-----------------------------
1          1   null     root1
2          2   null     root2
2.3        3   2        home
2.3.4      4   3        child
2.3.4.5    5   4        sub_child
2.3.4.5.6  6   5        sub_sub_child

तो, रूट पेज आईडी खोजने के लिए, बस FullID . का पहला भाग निकालें SQL या आपकी एप्लिकेशन भाषा के माध्यम से।

यदि SQL का उपयोग कर रहे हैं, तो आप रूट आईडी प्राप्त करने के लिए निम्न SQL का उपयोग कर सकते हैं।

-- MySQL dialect
select substring_index(FullID,'.',1) as RootID from table;

-- SQL Server dialect
select case charindex('.', FullID) when 0 then FullID else substring(FullID, 1, charindex('.', FullID)-1) end as RootID from table

नोड और उसके बच्चों को हटाने के लिए

DELETE table WHERE id=<CURRENT_NODE_ID> OR FullID LIKE '<CURREN_NODE_FULLID>.%'

नोड और उसके बच्चों को स्थानांतरित करने के लिए

-- change the parent of current node:
UPDATE table
SET parent=<NEW_PARENT_ID>
WHERE id=<CURRENT_NODE_ID>

-- update it's FullID and all children's FullID:
UPDATE table
SET FullID=REPLACE(FullID,<CURRENT_NODE_PARENT_FULLID>, <NEW_PARENT_FULLID>)
WHERE (id=<CURRENT_NODE_ID> OR FullID LIKE '<CURRENT_NODE_FULLID>.%')

नोट

यह ट्रिक केवल सीमित ट्री स्तर के मामलों या FullID . पर लागू होती है यदि वृक्ष का स्तर बहुत गहरा है, तो लंबी सामग्री धारण नहीं कर सकता।



  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. MySql में पंक्तियों के लिए स्तंभों की सरल धुरी

  3. MySQL क्लाइंट को MySQLdb के साथ ऑटो री-कनेक्ट कैसे सक्षम करें?

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

  5. MySQL में गतिशील रूप से एक कॉलम चुनना