2016-06-14 5 views
1

私はこの行の値に応じてクエリの値を出力する方法は?

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

ようなクエリの結果を持っている場合はどのように列type_nameの値の出力カウントベースをしますか?

表から、行の値 'test3'は存在しませんが、リフレッシュ後にそれが存在しないことを意味するわけではありません。

以下のコードでは、test3の値が存在しないため、値を取得するだけですが、ループは3回繰り返されます。

<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> 

答えて

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> 

あなたはよりダイナミックなアプローチが必要な場合は、あなたがあなたの完全なを変換することができ

0

表示されるはずですクエリ結果(すべての列)を構造体の配列に置き換えます。

<!--- 

    <!--- 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> 
関連する問題