2016-06-14 13 views
1

Wenn ich ein Abfrageergebnis wie folgt type_name die Zählung Basis auf dem Wert der SpalteWie gibt man die Werte einer Abfrage in Abhängigkeit vom Zeilenwert aus?

type_name | count 
----------------- 
test1  | 5 
test2  | 4 
test4  | 7 

Wie Ausgabe?

Aus der Tabelle existiert der Zeilenwert 'test3' nicht, aber es bedeutet nicht, dass er nach einer Aktualisierung nicht mehr existiert.

Mit dem untenstehenden Code werde ich nur den Wert bekommen, aber 3-mal Schleife, da Test3 Wert nicht existiert.

<cfoutput name="query"> 
    <table> 
     <tr><td><cfif query.type_name eq 'test1'>#query.count#</cfif></td></tr> 
     <tr><td><cfif query.type_name eq 'test2'>#query.count#</cfif></td></tr> 
     <tr><td><cfif query.type_name eq 'test3'>#query.count#</cfif></td></tr> 
     <tr><td><cfif query.type_name eq 'test4'>#query.count#</cfif></td></tr> 
</cfoutput> 

Antwort

0
<cfset testResults = [0,0,0,0]> 

<cfloop query="query"> 
    <cfset testResults[right(query.type_name, 1)] = query.count> 
</cfloop> 

<table> 
<cfloop array="#testResults#" index="count"> 
    <td>#count#</td> 
</cfloop> 
</table> 

Sie sollten

0

sehen Wenn Sie einen dynamischeren Ansatz benötigen, können Sie Ihre volle verwandeln Abfrage Ergebnis (alle Spalten) zu einem Array von Strukturen:

<!--- 

    <!--- test data ---> 
    <cfset query = queryNew("type_name,count", "VARCHAR,INTEGER")> 
    <cfset queryAddRow(query, 3)> 
    <cfset querySetCell(query, "type_name", "test1", 1)> 
    <cfset querySetCell(query, "count", "5", 1)> 
    <cfset querySetCell(query, "type_name", "test2", 2)> 
    <cfset querySetCell(query, "count", "4", 2)> 
    <cfset querySetCell(query, "type_name", "test4", 3)> 
    <cfset querySetCell(query, "count", "7", 3)> 

---> 

<!--- number of tests to list ---> 
<cfset expectedNumberOfRows = 4> 

<!--- remember all columns while transforming query to array of structs ---> 
<cfset queryColumns = listToArray(query.columnList)> 

<!--- initialize array of structs ---> 
<cfset testResults = arrayNew(1)> 
<cfloop from="1" to="#expectedNumberOfRows#" index="i"> 

    <cfset blankResult = structNew()> 

    <!--- initialize all columns for each row ---> 
    <cfloop array="#queryColumns#" index="columnName"> 
     <cfset blankResult[columnName] = ""> 
    </cfloop> 

    <!--- default values for specific columns ---> 
    <cfset blankResult["type_name"] = "test#i#"> 
    <cfset blankResult["count"]  = "0"> 

    <cfset testResults.add(blankResult)> 
</cfloop> 

<!--- transfer cell values from each query row to array of structs ---> 
<cfset queryRowIndex = 1> 
<cfloop query="query"> 

    <!--- extract possible row index ---> 
    <cfset testNumber = trim(reReplace(query.type_name, "[^0-9]*([0-9]+)$", "\1"))> 

    <!--- transfer cells ---> 
    <cfif reFind("^[0-9]+$", testNumber)> 
     <cfloop array="#queryColumns#" index="columnName"> 
      <cfset testResults[int(testNumber)][columnName] = query[columnName][queryRowIndex]> 
     </cfloop> 
    </cfif> 

    <cfset queryRowIndex++> 
</cfloop> 

<cfoutput> 

    <table> 
     <cfloop array="#testResults#" index="testResult"> 
      <tr> 
       <td>#testResult.type_name#</td> 
       <td>#testResult.count#</td> 
       <!--- add additional columns if desired ---> 
      </tr> 
     </cfloop> 
    </table> 

</cfoutput>