【问题标题】:Conditional CF Record Count条件 CF 记录计数
【发布时间】:2018-06-25 15:15:01
【问题描述】:

我试图通过同时查询多个类别的大量项目来保存我的数据库服务器的一些请求,然后使用<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" 的记录,我希望“A 事物表”显示“无结果”,但 RecordCount 似乎适用于整个查询。有没有办法像&lt;cfif #queryList.RecordCount# WHERE #category# eq "A" GT "0"&gt;这样说些什么?

【问题讨论】:

  • QoQ 的作品,但不太理想。请记住,它们不是免费的。因此,您基本上是在用额外的数据库访问来换取额外的资源成本,以在内存中构建多个数据集。我认为可以在原始 sql 查询中做到这一点。 1. 你的 dbms 是什么? 2.“大”查询是什么样的?

标签: coldfusion cfquery cfoutput


【解决方案1】:

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>

【讨论】:

  • 这是我之前想到的,但我一定是搞砸了,因为它不能正常工作。感谢您的建议和正确的格式,这真的很有帮助。
【解决方案2】:

我相信您正在尝试执行以下操作。 &lt;cfoutput&gt; 有一个功能可以帮助您对查询结果进行分组,因为查询是按分组项排序的。

<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>

【讨论】:

  • 我不太想进行这样的分组。我正在尝试获取查询返回,对其进行过滤,以便在每个特定表中仅显示某些返回的记录,并获取这些过滤结果的记录计数。因此,如果我总共返回 500 条记录,其中 100 条是 A 类,我想用一种方式说“如果 A 类的 recordCount 为 0,则显示‘没有 A 类项目”,但我只能弄清楚如何获取查询的总记录数。
  • @MLynch - 认为您仍然可以使用分组输出来做到这一点。只需设置一个标志以指示何时没有“事物”找到结果。 trycf.com/gist/f15f95f588ac3271d0a52c6a493b2b05/…
【解决方案3】:

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>

【讨论】:

  • 这是一个有趣的想法,并且可以使用一些额外的逻辑。它不会按原样工作,因为该查询中的 count(*) 永远不会为 0。@MLynch - 您使用的是哪个 dbms?用于返回多个结果集的查询是什么?
  • 另外,根据 DBMS,GROUP BY 的列数不能少于 SELECTing。但是您可以使用子选择或窗口函数来获取您要查找的计数。
猜你喜欢
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
相关资源
最近更新 更多