More loopy looism
Here’s a little thing I was forced to realise after a far too high profile site when slightly wrong (in a far too big way).
Looping a query inside a loop of another query changes the way you can refer to the outer-loops current row. Running the following code demonstrates this:
<cfscript>
qry_foo = QueryNew('foo');
QueryAddRow(qry_foo, 3);
for(i=1; i LTE 3; i=i+1){
QuerySetCell(qry_foo,'foo',"foo #i#",i);
}
qry_bar = QueryNew("bar");
QueryAddRow(qry_bar, 10);
for(i=1; i LTE 10; i=i+1){
QuerySetCell(qry_bar,'bar',"bar #i#",i);
}
</cfscript>
<cfoutput>
<ul>
<cfloop query="qry_foo">
<li>#qry_foo.foo#
<ul>
<cfloop query="qry_bar">
<li>#qry_foo.foo#</li>
</cfloop>
</ul>
</li>
</cfloop>
</ul>
</cfoutput>
The problem is that you cannot access the current row of the qry_foo query when inside the loop of qry_bar in this way. Instead, you would have to use:
qry_foo.foo[qry_foo.currentRow]
Does anyone else find this bizarre?