我昨天在这里问了一个问题(cfquery grouping, counts & maxrows)。只要计数方面成功运作,这个问题就能成功回答。但是,我得到了另一个方面的奇怪结果,我可以理解。
场景是这样的 - 我在一个查询中返回顶级类别和子类别,通过嵌套cfoutput返回子类别。结果有效,但有一个例外 - 子类别总是返回完整列表 - 即如果我将初始输出限制为仅在屏幕上返回2行,我总是从第一个顶级类别获得前2行 - 现在“当前”顶级类别中的前两行。
我已经尝试在cfoutput查询中清除数组,在cfloop等中 - 都没有成功。
我已经粘贴了下面的代码,并附上了它生成的当前屏幕截图。我失去了所有头发之前对此的任何指示都将被感激地接受!
<cfquery name="getcategories">
SELECT p.ID AS CategoryID, p.Cat_Name as CategoryName, p.Cat_Shortname, c.ID AS SubCategoryID, c.Cat_Name as SubCategoryName, c.Cat_Shortname AS SubCatShortname
FROM product_categories p LEFT JOIN product_categories c ON p.ID = c.SubcategoryOf
WHERE p.SubcategoryOf = 0
</cfquery>
<cfset subcategoryNames = ArrayNew(1)>
<cfoutput query="getcategories" group="CategoryName">
<li class="catli">CategoryName : #CategoryName#</li>
<cfoutput>
<cfset arrayAppend(subcategoryNames, SubcategoryName)>
<p>ArrayAppend : #SubcategoryName#<br /></p>
</cfoutput>
<cfloop from="1" to="2" index="i">
<li class="subli">SubcategoryName : #SubcategoryName[i]#</li>
</cfloop>
<cfif arrayLen(subcategoryNames) GT 2>
<p>ArrayLen is GT 2</p>
<li class="subli moreli">
+ #arrayLen(subcategoryNames) - 2# More Subcategories
</li>
<!--- Extra Subcategories --->
<p>Extra Subcategories</p>
<cfloop from="3" to="#arrayLen(subcategoryNames)#" index="r">
<li class="subli">SubcategoryName : #SubcategoryName[r]#</li>
</cfloop>
<!--- End Extra Subcategories --->
</cfif>
</cfoutput>
答案 0 :(得分:1)
你应该能够切换这两行:
<cfset subcategoryNames = ArrayNew(1)>
<cfoutput query="getcategories" group="CategoryName">
对此:
<cfoutput query="getcategories" group="CategoryName">
<cfset subcategoryNames = ArrayNew(1)>
这将在每个新的顶级类别的开头重置您的数组。
您也可以按照原始顺序保留它们,然后执行此操作:
<cfset subcategoryNames = ArrayNew(1)>
<cfoutput query="getcategories" group="CategoryName">
<cfset ArrayClear(subcategoryNames) />