группировка cfquery, количество и максимальное количество строк

#coldfusion

#coldfusion

Вопрос:

Я начну с объяснения того, что я делаю — я чувствую, что объяснение «реального мира» облегчит понимание. У меня есть список категорий и подкатегорий для интернет-магазина. Таблица базы данных настраивается простым способом — идентификатор, имя_категории и subcategoryof — subcategoryof равны 0 для представления категории верхнего уровня.

В главном индексе хранилища я перечисляю все категории и подкатегории, используя комбинацию одного запроса с использованием левого соединения и cfoutput в запросе cfoutput (код вставлен ниже). Это хорошо работает и позволяет мне достаточно хорошо стилизовать категории и подкатегории верхнего уровня, чтобы различать их.

Однако список становится немного длинным, и теперь для навигации по странице требуется изрядное количество прокрутки. Что я хотел бы сделать, так это;

Выведите все категории верхнего уровня, поскольку в настоящее время выводятся только 2 подкатегории, показывающие количество дополнительных подкатегорий (т.е. еще 7 подкатегорий).

Теперь я фактически буду выводить все так, как я делаю сейчас, однако после 2-й подкатегории я установлю следующие подкатегории как скрытые и использую текст » еще 7 подкатегорий» для переключения отображения (все еще со мной здесь?).

Моя проблема и вопрос заключается в следующем: как мне получить количество подкатегорий для использования с моим текстом » x дополнительных подкатегорий»? Я предполагаю, что мой текущий план использования инкрементного подсчета для определения точки, в которой я начинаю скрывать строки, является лучшим маршрутом?

Существующий код ниже

 <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> 
<ul>
   <cfoutput query="getcategories" group="CategoryName">
    <li class="catli"><a href="">#CategoryName#</a></li> 
    <cfoutput><li class="subli"><a href="">#SubcategoryName#</a></li></cfoutput>
        <li class="subli moreli"><a href="">  7 More Subcategories</a></li>
   </cfoutput>
</ul>
  

Ответ №1:

 <ul>
   <cfset SubcategoryNames = []>
   <cfoutput query="getcategories" group="CategoryName">
    <li class="catli"><a href="">#CategoryName#</a></li> 
        <cfoutput>
          <cfset arrayAppend(subcategoryNames, SubcategoryName)>
        </cfoutput>
        <cfloop from="1" to="#max(arrayLen(subcategoryNames),2)#" index="i">
            <li class="subli"><a href="">#SubcategoryName[i]#</a></li>
        </cfloop>
        <cfif arrayLen(subcategoryNames) GT 2>
          <li class="subli moreli">
            <a href="">  #arrayLen(subcategoryNames) - 2# More Subcategories</a>
          </li>
        </cfif>
   </cfoutput>
</ul>
  

Комментарии:

1. Спасибо, Генри, это огромная помощь. В интересах всех, кто пытается сделать то же самое, ваш код работал нормально, но мне пришлось внести одно небольшое изменение, чтобы вывод отображался правильно; <li class=»subli»><a href=»»>#SubcategoryName[i]#</a>>