Friday 15 February 2013

mysql stored procedure that calls itself recursively -


मेरे पास निम्न तालिका है:

  id | माता-पिता | मात्रा ------------------------- 1 रिक्त | 5 2 रिक्त | 3 3 | 2 | 10 4 2 | 15 5 | 3 | 2 6 | 5 | 4 7 | 1 | 9   

अब मुझे mysql में एक संग्रहीत कार्यविधि की आवश्यकता है जो स्वयं को पुनरावर्तक कहता है और गणना की मात्रा को वापस देता है। उदाहरण के लिए आईडी 6 में माता-पिता के रूप में 5 हैं, जो माता-पिता के रूप में 3 हैं, जो माता-पिता के रूप में 2 हैं। इसलिए मुझे इसके परिणामस्वरूप 4 * 2 * 10 * 3 (= 240) की गणना करने की आवश्यकता है।

मैं संग्रहीत कार्यविधियों में काफी नया हूँ और मैं उन्हें बहुत बार उपयोग नहीं करूँगा भविष्य में, क्योंकि मुझे अपने प्रोग्राम कोड में अपने व्यवसाय के तर्क को पसंद करना पड़ता है, बजाय डेटाबेस में। लेकिन इस मामले में मैं इसे से नहीं बचा सकता।

हो सकता है कि एक Mysql गुरु (जो आप है) कुछ सेकंड में एक कामकाजी बयान को हैक कर सकते हैं।

< Div class = "post-text" itemprop = "text">

इसका कार्य केवल mysql संस्करण में & gt; = 5

संग्रहीत कार्यविधि घोषणा यह है,

आप कर सकते हैं इसे थोड़ा सुधार दें, लेकिन यह काम कर रहा है: <पूर्व> DELIMITER $ 1 का निर्माण प्रक्रिया कैलकटॉल (संख्या INT में, कुल INT में) BEGIN_ DECLARE parent_ID INT DEFAULT NULL; DECLARE TCTotal INT DEFAULT 0; DECLARE tmptotal2 INT DEFAULT 0; माता-पिता का परीक्षण करें WHERE आईडी = number में parent_ID; चयन मात्रा से WHOE आईडी = संख्या INTO tmptotal; यदि parent_ID नल है तो कुल सेट = tcriptotal; ELSE कॉलटाल (पेरेंट_आईडी, टीटटाल 2); SET कुल = tmptotal2 * tcriptotal; अगर अंत; END $ $ DELIMITER;

कॉलिंग की तरह है (यह वैरिएबल सेट करने के लिए ज़रूरी है):

  SET @@ ग्लोबल। मैक्स_स्प_रेकर्सियन_डिप = 255; SET @@ session.max_sp_recursion_depth = 255; कॉल कैल्टोटॉलल (6, @टाटल); SELECT @total;    

No comments:

Post a Comment