cfquery группировка, количество и максимальные значения - PullRequest
2 голосов
/ 07 октября 2011

Я начну с объяснения того, что я делаю - я чувствую, что объяснение «реального мира» облегчит это понимание. У меня есть список категорий и подкатегорий для интернет-магазина. Таблица базы данных настраивается простым образом - id, category_name и 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 Ответ

2 голосов
/ 07 октября 2011
<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>
...