Sono molto curioso del motivo per cui ciò sta accadendo. Ci ho provato due volte e, dopo un sacco di ricerche su google, non ho trovato alcuna ragione per cui capisco. L'essenza di esso:Cloop nidificato con meno record del ciclo esterno causa errore "indice di matrice fuori intervallo"
Query 1: selectContent (6 articoli; niente spazi/nulli ecc)
Domanda 2: selectPricing (5 articoli; niente spazi/nulli ecc)
uscita:
<cfloop query="selectContent">
<section>
#selectContent.h2#
<cfif selectContent.id eq 3>
<cfloop query="selectPricing" group="groupCol">
<table class="pricing">
<thead>
<tr>
<th>#description#</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<cfloop>
<tr>
<td>#selectPricing.description#</td>
<td>#selectPricing.price#</td>
</tr>
</cfloop>
</tbody>
</table>
</cfloop>
</cfif>
#selectContent.content#
</section>
</cfloop>
Questo darà il seguente errore: Indice della matrice fuori intervallo: 5
l'errore si verifica solo quando la seconda q uery ha meno record del primo. In sostanza, sembra che il primo cfloop riprenda l'iterazione del ciclo da quel secondo e questo causi il problema, ma anche solo se si dispone di quel terzo cfloop raggruppato. L'intero cfloop interno corre, come è nella fonte.
mi è venuta in mente due modi per risolvere questo:
- fare questo con cfoutput/gruppo, ma questo è relativamente brutta in quanto significa che un sacco di chiusura della cfoutputs da altre parti della pagina.
- attaccare un cfbreak su quel terzo cfloop se currentRow corrisponde al recordcount.
Così, due domande:
Perché questo ancora accadendo?
Dovrei utilizzare un approccio completamente diverso qui (il fatto che googling/so'ing non stia trovando altri con questo problema sembra senz'altro implicare che ...)?
EDIT ho depositato questo come un bug Coldfusion in base al feedback di Adam Cameron sotto. Bug #3820049
Hai nessun attributo sul tag interno di cfloop, è quella sintassi valida? – Busches
Sì. Questo scorre attraverso i risultati raggruppati, cioè se la tua query è stata raggruppata per genere, ciò restituirebbe tutti i nomi per genere (vedi http://www.bennadel.com/blog/2359-coldfusion-10-using-the-group-attribute -con-cfloop-to-gruppo-query-rows.htm). Funziona se non ce l'hai all'interno di quel primo cfloop (prima di quello raggruppato).Dovrebbe fondamentalmente funzionare come il gruppo cfoutput, che è quello che Adam usa sotto come soluzione alternativa, e si può vedere essenzialmente la stessa sintassi usata lì. – sckd
* Dovrei utilizzare un approccio completamente diverso qui * Sono curioso di sapere perché più query e cicli annidati rispetto a una singola query con un JOIN? – Leigh