如果没有记录是if语句的一部分,我怎么能离开循环呢?

时间:2014-05-23 03:27:02

标签: coldfusion cfloop

以下代码有效,但我想显示“无记录”消息  <cfif GetResults2.csedept_id eq aFieldValue>没有该值的记录。我试图打开一个计数器,但我不能让它显示'没有记录'而不显示  如果没有记录,则<thead> <th>Name</th> <th>Positive Comment</th> <th>Negative Comment</th></thead>表格的标题。

如果结果显示为空,如何显示“无记录”并隐藏表头

现在,如果结果为空,则会显示“无结果”(正确)并显示标题(不正确)。

<cfset counter3= 0>

<table cellpadding="0" cellspacing="0" class="tablecolors">
<h2> Comments </h2>
 <thead> <th>Name</th> <th>Positive Comment</th> <th>Negative Comment</th></thead>
  <cfloop  query="GetResults2">
    <cfif GetResults2.csedept_id eq aFieldValue>     

      <tr>
        <td nowrap="nowrap">#emp_namefirst# #Left(emp_namelast, 1)#  </td>
        <td>#Replace(commentpositive, emp_namefirst, "<B>" & emp_namefirst & "</B>")#</td>
        <td>#Replace(commentnegative, emp_namefirst, "<B>" & emp_namefirst & "</B>")#</td>
      </tr>
<cfelse><p>no records</p>

    </cfif>
  </cfloop>    
    </table>

更新:只是要添加我确实有上面的另一个查询,如@FRANK说,它做了几乎相同的事情,例如:

'<cfloop query="GetEmployeeTotals3">
        <cfif GetEmployeeTotals3.csedept_id eq aFieldValue> '

这是查询:

select GetResults.* , GetEmployees.emp_namefirst, GetEmployees.emp_namelast
    from GetResults, GetEmployees
    where employee = emp_id
    order by csedept_id

所以我尝试过的所有解决方案都无效。

4 个答案:

答案 0 :(得分:0)

我建议使用查询查询将结果集缩小到您首先关注的值。然后你可以在输出表之前轻松检查记录计数。

或者,首先循环并使用cfsavecontent构建结果,然后检查在找到表位之前是否找到任何结果。

答案 1 :(得分:0)

编辑:问题澄清后更新的答案

在检查记录时,您需要移动cfif以包括表头。如果检查带有记录计数,则输出表头以及结果,否则输出&#34;无结果&#34;。我在下面写了两个版本,一个是使用cfoutput而不是一个循环(只是个人偏好),另一个是你的循环,如果你想保留它。

我添加了丹的listfind() valuelist()组合......所以请相信这一点。

修改编辑所以这是超强度/超正确的真棒解决方案,我已经厌倦了编辑 - 这个答案 - 50次 - -get-OP-an-answer&#39;,从上面/下面的Dan回答中得到无耻的盗窃。或者我们在哪里以订单方式结束。

<table>
<cfif getresults2.recordcount AND ListFind(ValueList(GetResults2.csedept_id), aFieldValue)> 
<tr>
    <th>name</th> 
    <th>positive comment</th> 
    <th>negative comment</th>
</tr>

<cfoutput query="getresults2">
<tr>
    <td nowrap="nowrap">#emp_namefirst# #left(emp_namelast, 1)#  </td>
    <td>#replace(commentpositive, emp_namefirst, "<b>" & emp_namefirst & "</b>")#</td>
    <td>#replace(commentnegative, emp_namefirst, "<b>" & emp_namefirst & "</b>")#</td>
</tr>
</cfoutput> 

<cfelse>
<tr colspan="3">
    <td><p>no records</p></td>
</tr>
</cfif>
</table>

如果您的代码中有cfoutput(我们看不到的地方),那么这是您的cfloop返回,只需将上面代码段中的cfoutput替换为<cfloop query="getresults2"> <tr> <td nowrap="nowrap">#emp_namefirst# #left(emp_namelast, 1)# </td> <td>#replace(commentpositive, emp_namefirst, "<b>" & emp_namefirst & "</b>")#</td> <td>#replace(commentnegative, emp_namefirst, "<b>" & emp_namefirst & "</b>")#</td> </tr> </cfloop>

{{1}}

答案 2 :(得分:0)

这样的事情应该有效。您必须设置showRecords标志,以确定是否应显示标题。

<cfset showRecords = false>
<cfloop query="GetResults2">
  <cfif GetResults2.csedept_id eq aFieldValue> 
    <cfset showRecords = true>
    <cfbreak>
  </cfif>
</cfloop>

<h2> Comments </h2>
<cfif showRecords>
  <table cellpadding="0" cellspacing="0" class="tablecolors">
  <thead> <th>Name</th> <th>Positive Comment</th> <th>Negative Comment</th></thead>
  <cfloop query="GetResults2">
    <cfif GetResults2.csedept_id eq aFieldValue> 
      <tr>
        <td nowrap="nowrap">#emp_namefirst# #Left(emp_namelast, 1)#  </td>
        <td>#Replace(commentpositive, emp_namefirst, "<B>" & emp_namefirst & "</B>")#    </td>
        <td>#Replace(commentnegative, emp_namefirst, "<B>" & emp_namefirst & "</B>")#</td>
      </tr>
    </cfif>
  </cfloop>    
  </table>
<cfelse>
  <p>no records</p>
</cfif>

答案 3 :(得分:0)

虽然你的问题仍然不清楚,但这可能就是你想要的。

<cfif ListFind(ValueList(GetResults2.csedept_id), aFieldValue)> 
your existing code to display results in a table
<cfelse>
<p>No Records Found</p>

请注意:

ListFind(ValueList(GetResults2.csedept_id), aFieldValue)
即使GetResults2根本没有记录,

也会执行并返回false。

编辑从此处开始

根据此评论,&#34;如果只出现在某些显示屏上,那么对于那些不匹配的人则忽略&#34;将现有代码更改为:

<cfquery name = "q3" dbtype = "query">
select * from GetResults2
where csedept_id = #aFieldValue#
<cfquery>

<table>
column header row
<cfoutput query="q3">
data rows
</cfoutput>
<table>

此答案开头的初始构造仍然适用。