Coldfusion nested loops question

Hi,

I have a CF9 page where I have 2 loops - an outer loop that loops over form variables and an inner query loop that checks to see if there is match in a form variable from the outer loop in the inner query loop. If there is a match, then I need to populate a structure with a key/value pair - a form variable value from the outer loop is key and the query's resultset value is the value.

I've tried to do this but it's not giving me the desired result. Here is the code that I have:

<cfset teamStruct = structnew() />
<cfloop index="loopCount" from="1" to="#val(form.schoolcount)#">
        <cfset variables.schoolname = form["schoolname_#LoopCount#"]>
        <cfset variables.teamname = form["sel_teamname_#LoopCount#"]>
        <!---begin check for teamnames--->
             <cfloop query="GetTeams">
                   <cfif GetTeams.team_name is variables.teamname>
                              <!---this is the struct that is not being updated properly--->
                    <cfset teamStruct[variables.schoolname] = GetTeams.team_name />
                </cfif>
             </cfloop>
</cfloop>
LVL 1
roger vAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Pravin AsarPrincipal Systems EngineerCommented:
Hope this clarifies how the array of structures works.
Here is complete example. You may also notice use of QueryNew() feature of CF9



<cfform name="f1">
<br/><cfinput type="hidden" name="schoolcount" value="3"/>
<br/><cfinput type="text" name="schoolname_1" value="school_1"/>
<cfinput type="text" name="sel_teamname_1" value="team_1"/>
<br/><cfinput type="text" name="schoolname_2" value="school_2"/>
<cfinput type="text" name="sel_teamname_2" value="team_2"/>
<br/><cfinput type="text" name="schoolname_3" value="school_3"/>
<cfinput type="text" name="sel_teamname_3" value="team_3"/>
<br/><cfinput type="submit" name="submit" value="Submit">
</cfform>
<cfexit>
</cfif>


<cfset GetTeams=QueryNew("team_id,team_name","Integer,VarChar")>
<cfloop from="1" to="5" index="tx">
<cfset tt=QueryAddRow(GetTeams)/>
<cfset tt=QuerySetCell(GetTeams,"team_id",tx)>
<cfset tt=QuerySetCell(GetTeams,"team_name","team_"&tx)>
</cfloop>

<cfset teamArray=ArrayNew(1)>
<cfset teamCnt=1>
<cfloop index="loopCount" from="1" to="#val(form.schoolcount)#">
      <cfset variables.schoolname = form["schoolname_#LoopCount#"]>
    <cfset variables.teamname = form["sel_teamname_#LoopCount#"]>
      <cfdump var="#variables.schoolname#"/>
      <cfdump var="#variables.teamname#"/>
    <!---begin check for teamnames--->
         <cfloop query="GetTeams">
          <cfif CompareNoCase(trim(GetTeams.team_name[GetTeams.currentrow]),trim(variables.teamname)) eq 0>
            <cfset tt=StructInsert(teamstruct,"schoolname",#GetTeams.team_name[GetTeams.currentrow]#)/>
                  <cfset teamArray[teamCnt] = teamStruct>
                  <cfset teamCnt=teamCnt+1>
         </cfif>
      </cfloop>
</cfloop>

<!--- Dump the teamArray --->
<cfdump var="#teamArray#"/>
0
Pravin AsarPrincipal Systems EngineerCommented:
Use this one. I cleaned up few things

<cfif not isdefined("form.submit")>
<cfform name="f1">
<br/><cfinput type="hidden" name="schoolcount" value="3"/>
<br/><cfinput type="text" name="schoolname_1" value="school_1"/>
<cfinput type="text" name="sel_teamname_1" value="team_1"/>
<br/><cfinput type="text" name="schoolname_2" value="school_2"/>
<cfinput type="text" name="sel_teamname_2" value="team_2"/>
<br/><cfinput type="text" name="schoolname_3" value="school_3"/>
<cfinput type="text" name="sel_teamname_3" value="team_3"/>
<br/><cfinput type="submit" name="submit" value="Submit">
</cfform>
<cfexit>
</cfif>


<cfset GetTeams=QueryNew("team_id,team_name","Integer,VarChar")>
<cfloop from="1" to="5" index="tx">
<cfset tt=QueryAddRow(GetTeams)/>
<cfset tt=QuerySetCell(GetTeams,"team_id",tx)>
<cfset tt=QuerySetCell(GetTeams,"team_name","team_"&tx)>
</cfloop>

<cfset teamArray=ArrayNew(1)>
<cfset teamCnt=1>
<cfloop index="loopCount" from="1" to="#val(form.schoolcount)#">
      <cfset variables.schoolname = form["schoolname_#LoopCount#"]>
    <cfset variables.teamname = form["sel_teamname_#LoopCount#"]>
      <!---<cfdump var="#variables.schoolname#"/>
      <cfdump var="#variables.teamname#"/>--->
    <!---begin check for teamnames--->
         <cfloop query="GetTeams">
          <cfif CompareNoCase(trim(GetTeams.team_name[GetTeams.currentrow]),trim(variables.teamname)) eq 0>
                  <cfset teamStruct = structnew() />
            <!---this is the struct that is not being updated properly--->
            <cfset tt=StructInsert(teamstruct,"schoolname",#GetTeams.team_name[GetTeams.currentrow]#)/>
                  <cfset teamArray[teamCnt] = teamStruct>
                  <cfset teamCnt=teamCnt+1>
         </cfif>
      </cfloop>
</cfloop>

<!--- Dump the teamArray --->
<cfdump var="#teamArray#"/>
0
roger vAuthor Commented:
@pravinasar:

Instead of a struct you used an array. Why?

Also, I'm more familiar/comfortable with the whole key/value concept of structs. Is it possible to use struct instead of array?
0
Pravin AsarPrincipal Systems EngineerCommented:
What I am using is array of structures, as at the end of loop we have many elements.

Please read the article at sitepoint.

http://www.sitepoint.com/coldfusion-ii-structs/
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
ColdFusion Language

From novice to tech pro — start learning today.