CFML -

2011-06-17 3 views
5

संरचना के लिए क्वेरी पंक्ति मैं एक फ़ंक्शन द्वारा क्वेरी से एक पंक्ति को संभालना चाहता हूं, जहां मैं एक संरचना के रूप में पंक्ति को पास करता हूं।CFML -

आदर्श

...

<cfloop query="myquery"> 
#myfunction(#row#)# 
</cfloop> 

मैं भी इस तरह यह सेट कर सकते हैं अप ...

<cfloop query="myquery"> 
#myfunction(#col1#,#col2#,#col3#,#col4#)# 
</cfloop> 

लेकिन मैं नहीं करना चाहती। मैं एक पंक्ति निकालने का सरल तरीका खोजने में सक्षम नहीं हूं, लेकिन मैंने सोचा कि मैं पूछूंगा।

उत्तर

3

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

+1

मैं इस पहले भर में आया था, मैंने सोचा था कि CFML पिछले 5 वर्षों में इस क्षेत्र में कुछ प्रगति की है हो सकता है। लगता है कि किसी भी हैक के बिना उपलब्ध होना चाहिए। – Daniel

+0

मुझे यकीन नहीं है कि यह मूल भाषा में कितना उपयोगी होगा। मुझे किसी स्ट्रक्चर के रूप में कभी भी क्वेरी पंक्ति की आवश्यकता नहीं है। यह ध्यान में रखते हुए कि एक पंक्ति पर जल्दी लूप करना कितना आसान है और एक संरचना को पॉप्युलेट करना कितना आसान है, और तथ्य यह है कि यूडीएफ ऐसा करने के लिए मौजूद है, ऐसा लगता है कि यह भाषा के लिए एक अनावश्यक अतिरिक्त होगा। –

3

यह बेन साइट से कक्षा टिप्पणियां बिना

<--- --------------------------------------------------------------------------------------- ---- 

    Blog Entry: 
    Ask Ben: Converting A Query To A Struct 

    Author: 
    Ben Nadel/Kinky Solutions 

    Link: 
    http://www.bennadel.com/index.cfm?event=blog.view&id=149 

    Date Posted: 
    Jul 19, 2006 at 7:32 AM 

---- --------------------------------------------------------------------------------------- ---> 


<cffunction name="QueryToStruct" access="public" returntype="any" output="false" 
    hint="Converts an entire query or the given record to a struct. This might return a structure (single record) or an array of structures."> 
    <cfargument name="Query" type="query" required="true" /> 
    <cfargument name="Row" type="numeric" required="false" default="0" /> 

    <cfscript> 
     var LOCAL = StructNew(); 
     if (ARGUMENTS.Row){ 
      LOCAL.FromIndex = ARGUMENTS.Row; 
      LOCAL.ToIndex = ARGUMENTS.Row; 
     } else { 
      LOCAL.FromIndex = 1; 
      LOCAL.ToIndex = ARGUMENTS.Query.RecordCount; 
     } 
     LOCAL.Columns = ListToArray(ARGUMENTS.Query.ColumnList); 
     LOCAL.ColumnCount = ArrayLen(LOCAL.Columns); 
     LOCAL.DataArray = ArrayNew(1); 
     for (LOCAL.RowIndex = LOCAL.FromIndex ; LOCAL.RowIndex LTE LOCAL.ToIndex ; LOCAL.RowIndex = (LOCAL.RowIndex + 1)){ 
      ArrayAppend(LOCAL.DataArray, StructNew()); 
      LOCAL.DataArrayIndex = ArrayLen(LOCAL.DataArray); 
      for (LOCAL.ColumnIndex = 1 ; LOCAL.ColumnIndex LTE LOCAL.ColumnCount ; LOCAL.ColumnIndex = (LOCAL.ColumnIndex + 1)){ 
       LOCAL.ColumnName = LOCAL.Columns[ LOCAL.ColumnIndex ]; 
       LOCAL.DataArray[ LOCAL.DataArrayIndex ][ LOCAL.ColumnName ] = ARGUMENTS.Query[ LOCAL.ColumnName ][ LOCAL.RowIndex ]; 
      } 
     } 
     if (ARGUMENTS.Row){ 
      return(LOCAL.DataArray[ 1 ]); 
     } else { 
      return(LOCAL.DataArray); 
     } 
    </cfscript> 
</cffunction> 

उपयोग ...

<!--- Convert the entire query to an array of structures. ---> 
<cfset arrGirls = QueryToStruct(qGirls) /> 

<!--- Convert the second record to a structure. ---> 
<cfset objGirl = QueryToStruct(qGirls, 2) /> 
13

थोड़ा और सुरुचिपूर्ण देख समाधान, एकल पंक्ति के लिए मिला है

<cfscript> 
    function GetQueryRow(query, rowNumber) { 
     var i = 0; 
     var rowData = StructNew(); 
     var cols = ListToArray(query.columnList); 
     for (i = 1; i lte ArrayLen(cols); i = i + 1) { 
      rowData[cols[i]] = query[cols[i]][rowNumber]; 
     } 
     return rowData; 
    } 
</cfscript> 
2

एडोब कोल्डफ्यूजन में अबनामक एक फ़ंक्शन हैजो एक क्वेरी से एक स्ट्रक्चर में एक पंक्ति को परिवर्तित करता है।

परिशिष्ट

इस समारोह ColdFusion 9 और पहले पर उपलब्ध नहीं है।

0

एक अन्य समाधान होगा:

function QueryToStruct(query){ 
    var cols = ListToArray(query.columnList); 
    var salida = query.map(function(v=0,i,a){ 
         return {'#cols[1]#':v}; 
        }); 
    return ValueArray(salida,'#cols[1]#'); 
}