2014-09-08 9 views
9

से कम रिकॉर्ड वाले Nested cfloops मैं बहुत उत्सुक हूं कि यह क्यों हो रहा है। मैंने इसमें दो बार भाग लिया है, और गुगलिंग/सोइंग के एक टन के बाद, मुझे कोई कारण नहीं मिला है जिसे मैं वास्तव में समझता हूं। यह का सार:बाहरी लूप कारण "रेंज से बाहर सरणी सूचकांक" त्रुटि

क्वेरी 1: selectContent (6 रिकॉर्ड, कोई रिक्त स्थान/nulls आदि)

क्वेरी 2: selectPricing (5 रिकॉर्ड, कोई रिक्त स्थान/nulls आदि)

आउटपुट:

सीमा से बाहर सरणी सूचकांक::
<cfloop query="selectContent"> 
    <section> 
     #selectContent.h2# 
     <cfif selectContent.id eq 3> 
      <cfloop query="selectPricing" group="groupCol"> 
       <table class="pricing"> 
       <thead> 
        <tr> 
         <th>#description#</th> 
         <th>Price</th> 
        </tr> 
       </thead> 
       <tbody> 
        <cfloop> 
        <tr> 
         <td>#selectPricing.description#</td> 
         <td>#selectPricing.price#</td> 
        </tr> 
        </cfloop> 
       </tbody> 
       </table> 
      </cfloop> 
     </cfif> 
     #selectContent.content# 
    </section> 
</cfloop> 

यह निम्न त्रुटि दे देंगे 5

त्रुटि केवल तब होता है जब दूसरे क्ष यूरी के पहले की तुलना में कम रिकॉर्ड हैं। अनिवार्य रूप से ऐसा लगता है कि पहले सीएफएलओप उस दूसरे से लूप पुनरावृत्ति को लेता है और इससे समस्या उत्पन्न होती है, लेकिन केवल तभी यदि आपके पास उस तीसरे समूह वाले सीएफएलओओप हैं। संपूर्ण आंतरिक सीएफएलओओपी चलता है, जैसा कि स्रोत में है।

मैं इस को हल करने के लिए दो तरीके के साथ आ गए हैं:

  • cfoutput/समूह के साथ ऐसा करते हैं, लेकिन के रूप में यह पेज के अन्य भागों से cfoutputs के समापन के बहुत सारे मतलब यह है कि अपेक्षाकृत बदसूरत है।
  • यदि वर्तमान पंक्ति रिकॉर्डकाउंट से मेल खाती है तो उस तीसरे cfloop पर एक cfbreak चिपकाएं।

तो, दो सवाल:

  • क्यों यह और भी हो रहा है?

  • क्या मुझे यहां एक पूरी तरह से अलग दृष्टिकोण का उपयोग करना चाहिए (तथ्य यह है कि गुगलिंग/सोइंग इस मुद्दे के साथ दूसरों को नहीं ढूंढ रहा है निश्चित रूप से ऐसा लगता है कि ...)?

संपादित मैं एक Coldfusion नीचे एडम कैमरून की प्रतिक्रिया के आधार पर बग के रूप में यह मामला दर्ज किया है। Bug #3820049

+0

आपके पास पर यह उठाना चाहिए आंतरिक cfloop टैग पर कोई विशेषता नहीं है, वह वैध वाक्यविन्यास है? – Busches

+2

हां। यह समूहित परिणामों के माध्यम से loops, यानी अगर आपकी क्वेरी लिंग द्वारा समूहीकृत किया गया था, जो लिंग द्वारा सभी नाम वापस कर देगा (देखें http://www.bennadel.com/blog/2359-coldfusion-10-using-the-group-attribute -साथ-cfloop करने वाली समूह-प्रश्न-rows.htm)। यह काम करता है यदि आपके पास उस पहले cfloop (समूहबद्ध से पहले) में नहीं है।इसे मूल रूप से cfoutput समूह के समान काम करना चाहिए, जो कि एडम एक वर्कअराउंड के रूप में नीचे उपयोग करता है, और आप वहां आवश्यक रूप से उसी वाक्यविन्यास को देख सकते हैं। – sckd

+0

* क्या मुझे यहां एक पूरी तरह से अलग दृष्टिकोण का उपयोग करना चाहिए * मुझे उत्सुकता है कि जॉइन के साथ एक प्रश्न के विपरीत कई प्रश्न और नेस्टेड लूप क्यों हैं? – Leigh

उत्तर

5

ठीक है, आपको सीएफ में एक बग मिला है। मैं इसे दोहराने कर सकते हैं (पी एस ... it'd've शांत हो गया आप को शामिल किया था नमूना डेटा मुझे यह क्या करने वाले को बचाने!)

काम के आसपास सीधे आगे यह है:

<cfscript> 
selectContent = queryNew("h2,id,content", "varchar,integer,varchar", [ 
    ["one", 1, "content.1"], 
    ["two", 2, "content.2"], 
    ["three", 3, "content.3"], 
    ["four", 4, "content.4"], 
    ["five", 5, "content.5"], 
    ["six", 6, "content.6"], 
    ["seven", 7, "content.7"] 
]); 

selectPricing = queryNew("groupCol,description,price", "varchar,varchar,varchar", [ 
    ["groupCol.1", "description.1", "1.11"], 
    ["groupCol.2", "description.2", "2.22"], 
    ["groupCol.2", "description.3", "3.33"], 
    ["groupCol.3", "description.4", "4.44"], 
    ["groupCol.3", "description.5", "5.55"], 
    ["groupCol.3", "description.6", "6.66"] 
]); 

</cfscript> 
<cfloop query="selectContent"> 
    <section> 
     <cfoutput>#selectContent.h2#</cfoutput> 
     <cfif selectContent.id eq 3> 
      <cfoutput query="selectPricing" group="groupCol"> 
       <table class="pricing"> 
       <thead> 
        <tr> 
         <th>#description#</th> 
         <th>Price</th> 
        </tr> 
       </thead> 
       <tbody> 
        <cfoutput> 
        <tr> 
         <td>#description#</td> 
         <td>#price#</td> 
        </tr> 
        </cfoutput> 
       </tbody> 
       </table> 
      </cfoutput> 
     </cfif> 
     <cfoutput>#selectContent.content#</cfoutput> 
    </section> 
</cfloop> 

ध्यान दें कि मैंने आंतरिक लूपिंग करने के लिए <cfoutput> का उपयोग कैसे किया है।

यह ColdFusion में एक गंभीर बग (10 और 11) है, और आप उनके bug base (यदि आप करते हैं, यहाँ वापस टिकट नंबर/यूआरएल रिपोर्ट करें ताकि हम उस पर मतदान कर सकते हैं)

+0

लापता डेटा के बारे में क्षमा करें। और लड़का, विश्वास नहीं कर सकता कि मुझे एक बग मिला है। मैंने मूल रूप से इसे cfoutput के साथ भी ठीक किया था (ओपी देखें), लेकिन इस विशिष्ट पृष्ठ पर दूसरा विकल्प पसंद किया क्योंकि ऊपर और नीचे दोनों कोड हैं जो अन्यथा घोंसले कॉन्फ़िगरेशन त्रुटियों से बचने के लिए cfoutput के खोलने/बंद करने की आवश्यकता होती है। यही कारण है कि मैं सामान्य रूप से सीएफएलओप समूह खोद रहा हूं। मैं इसे एक बग के रूप में फाइल करूंगा और यहां वापस लिंक करूँगा और मूल पोस्ट भी अपडेट करूँगा। – sckd

+0

कोई चिंता डेटा फिर से नहीं। हाल ही में पूछे गए अधिकांश लोगों की तुलना में आपका प्रश्न एक हेलुवा बहुत बेहतर शब्द था। अगली बार के लिए सिर्फ एक सुझाव, यह सब कुछ है: आपके रेपो मामले में अधिक आत्मनिर्भर और नि: शुल्क खड़ा होना, हमारे लिए प्रतिलिपि बनाना/पेस्ट करना और इसे चलाने के लिए आसान है। –

संबंधित मुद्दे