ColdFusion Conditional RecordCount

时间:2011-09-26 21:21:10

标签: coldfusion conditional

好的SO用户......这是一个看似不可能出错的条件陈述。这很简单,但是,我无法弄清楚为什么它不会像预期的那样工作。

<cfoutput query="checkForAd">
        <!--- also used the line <cfif RecordCount eq 0> --->
    <cfif checkForAd.RecordCount eq 0>
        <!--- Display some message. (Perhaps using a table, undecided) --->
    <cfelse>
        <!--- Display some other message. (Happens to be a table) --->
    </cfif>
</cfoutput>

当RecordCount返回大于0的数字时,else情况正确显示。当RecordCount返回0时,不显示任何内容,并且表单沿其路径继续。我变得非常沮丧,因为这应该很简单......

2 个答案:

答案 0 :(得分:12)

如果查询集为空,则输出不会返回任何结果。尝试:

<cfif checkForAd.RecordCount eq 0>
    <!--- Display some message. (Perhaps using a table, undecided) --->
<cfelse>
    <cfoutput query="checkForAd">
        <!--- Display some other message. (Happens to be a table) --->
    </cfoutput>
</cfif>

我假设您要返回一些记录...如果您只是返回一个记录,则query="checkForAd"不是必需的。您可以简单地参考查询&amp; <cfoutput></cfoutput>中的变量。

修改

以下是访问查询变量的一种方法:QueryName["ColumnName"][RowNum]

(当您希望扩展编码时,您可以使用查询变量做很多事情。ColdFusion and getting data from MySQL处的不同方法有很好的概述

答案 1 :(得分:3)

正如nykash指出的那样,如果没有记录,cfoutput query(或cfloop query)的主体就永远不会执行,因此检查零记录数将永远不会在

但是,我发现以下示例更具可读性:

<cfif NOT checkForAd.RecordCount >
    <!--- Display some message. --->
</cfif>

<cfoutput query="checkForAd">
        <!--- loop through data --->
</cfoutput>

它可能看起来不太孤立,但我认为它更清晰,更容易看到发生了什么,特别是当与其他代码结合使用时。

特别是在RecordCount检查中,如果我关心具体数字,那么我将使用EQ(或NEQ / GT /等),但如果我只关心“有记录”与“没有记录”,那么我使用CFML提供的隐式布尔转换,用于简化代码。这确实使我更容易识别何时使用常见的二元选择或更重要的二元选择,因此导航代码更容易。