Условное количество записей CF
Я пытаюсь сохранить на сервере базы данных несколько запросов, запрашивая большое количество элементов сразу из нескольких категорий, а затем использую <cfif ... >
заявления для фильтрации этих результатов в уникальные таблицы, которые я показываю для каждой категории. Я ищу, чтобы найти количество записей для каждой из возвращенных категорий, а не только количество записей общего запроса.
Основной код:
<cfinvoke component="..." method="..." returnvariable="session.queryList">
...
</cfinvoke>
<cfoutput #session.queryList#>
<cfif #category# eq "A">
[Table for A things]
</cfif>
<cfif #category# eq "B">
[Table for B things]
</cfif>
<cfif #category# eq "C">
[Table for C things]
</cfif>
</cfoutput>
Я не хочу использовать "ORDER BY category" здесь, потому что таблицы на самом деле находятся в разных div, которые мы скрываем и показываем, поэтому нам нужны отдельные таблицы.
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы в "Таблице для вещей" было указано "Нет результатов", если нет возвращаемых записей, где category = "A", но RecordCount, похоже, применяется ко всему запросу. Есть ли способ сказать что-то вроде <cfif #queryList.RecordCount# WHERE #category# eq "A" GT "0">
?
3 ответа
QoQ может помочь.
<cfinvoke component="..." method="..." returnvariable="session.queryList">
...
</cfinvoke>
<!---then run QoQ on it--->
<cfquery name="catA" dbtype="query">
select * from session.queryList where category ="A"
</query>
<cfquery name="catB" dbtype="query">
select * from session.queryList where category ="B"
</query>
<cfif catA.recordcount>
<cfoutput query="catA">
[Table for A things]
</cfoutput>
<cfelse>
No Records for A things
</cfif>
<cfif catB.recordcount>
<cfoutput query="catB">
[Table for B things]
</cfoutput>
<cfelse>
No Records for B things
</cfif>
Я считаю, что вы пытаетесь сделать следующее. <cfoutput>
имеет функцию, которая помогает группировать результаты запроса, если запрос упорядочен по элементу группировки.
<cfoutput query="#session.queryList#" group="category">
<h3>Category #category#</h3>
<table>
<tr><th>...</th><th>...</th></tr>
<cfoutput><!--- This cfoutput loops through the each record in the group. --->
---rows---
</cfoutput>
<table>
</cfoutput>
QofQ медленный. Вы можете сделать это с помощью одной поездки в mySQL:
SELECT someColumn, category, count(*) AS categoryCount
FROM theTable
GROUP BY category
ORDER BY category, someColumn
Группировка даст вам счет по категориям, которые вы можете использовать в CFML.
<cfoutput query="session.queryList" group="category">
<cfif categoryCount eq 0>
No Records for #category#. =(
</cfif>
<cfoutput>
#someColumn#<br>
</cfoutput>
</cfoutput>