Ich bin sehr neugierig, warum das passiert. Ich bin jetzt zweimal reingelaufen, und nach einer ganzen Menge Googeln habe ich keinen Grund gefunden, den ich wirklich verstehe. Der Kern von ihm:Verschachtelte cfloops mit weniger Datensätzen als äußere Schleife verursachen "array index out of range" Fehler
Abfrage 1: selectContent (6 Datensätze; keine Leerzeichen/nulls etc)
Abfrage 2: selectPricing (5 Datensätze; keine Leerzeichen/nulls etc)
Output:
<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>
Dies wird den folgenden Fehler geben: Array-Index außerhalb des Bereichs: 5
der Fehler tritt nur auf, wenn der zweite q Sie hat weniger Einträge als die erste. Im Wesentlichen fühlt es sich so an, als würde der erste cfloop die Schleifeniteration von der zweiten übernehmen und dies verursacht das Problem, aber auch nur, wenn Sie diesen dritten gruppierten cfloop drin haben. Der gesamte innere cfloop läuft, wie auch in der Quelle.
Ich habe mit zwei Möglichkeiten, um dieses Problem zu beheben:
- tun dies mit cfoutput/Gruppe, aber das ist relativ hässlich wie es viele Schließung von cfoutputs aus anderen Teilen der Seite bedeutet.
- Legen Sie einen cfbreak für diesen dritten cfloop fest, wenn currentRow mit dem Datensatz übereinstimmt.
also zwei Fragen:
Warum ist dies auch geschieht?
Sollte ich hier einen völlig anderen Ansatz verwenden (die Tatsache, dass Googeln/So'ing andere nicht mit diesem Problem findet, scheint das zu implizieren ...)?
EDIT Ich habe dies als Coldfusion Fehler auf Adam Camerons Feedback unter dieser Eintragung erhoben. Bug #3820049
Sie haben keine Attribute auf dem inneren cfloop-Tag, ist das gültige Syntax? – Busches
Ja. Dadurch werden die gruppierten Ergebnisse durchlaufen, dh wenn Ihre Abfrage nach Geschlecht gruppiert wurde, werden alle Namen nach Geschlecht zurückgegeben (siehe http://www.bennadel.com/blog/2359-coldfusion-10-using-the-group-attribute) -with-cfloop-to-group-query-rows.htm). Dies funktioniert, wenn Sie es nicht innerhalb des ersten cfloop (vor dem gruppierten) haben.Es sollte im Grunde dasselbe wie cfoutput group funktionieren, was Adam unten als Workaround verwendet, und Sie können im Wesentlichen die gleiche Syntax sehen, die dort verwendet wird. – sckd
* Sollte ich hier einen völlig anderen Ansatz verwenden * Ich bin neugierig, warum mehrere Abfragen und verschachtelte Schleifen im Gegensatz zu einer einzigen Abfrage mit einem JOIN? – Leigh