当我尝试在上一个查询的输出中运行cfquery时,我得到了奇怪的意外结果。
示例:
<cfoutput query="reportInfo">
<tr>
<td>#id#</td>
<td>#name#</td>
<cfif Status EQ 'Complete'>
<cfquery name="submitInfo" datasource="RC">
SELECT *
FROM Action_Log
WHERE Form_ID = '#id#'
AND Action = 'Complete' OR Action = 'Saved'
</cfquery>
<cfset startStamp = submitInfo.Action_Time>
<cfoutput>startStamp</cfoutput>
<td>#startStamp#</td>
<cfelse>
<td>No Completion Date</td>
</cfif>
</tr>
</cfoutput>
当&#34; StartStamp&#34;输出到它为循环中的每个计数显示一次的页面,它为每个ID执行此操作,因此有很多额外的。
我认为它应该只在每次包含查询(reportInfo)输出循环时运行commitInfo查询,但是没有发生。
答案 0 :(得分:1)
(扩展自评论......)
<cfoutput>startStamp</cfoutput>
不确定你想要完成什么,但你应该摆脱内在的cfoutput tags
。只有在使用(经常被误解)<cfoutput group="...">
feature时才需要这些。它通常用于消除排序数据的重复项。但是,如果数据未正确排序 - 或者分组不正确 - 它可以产生您描述的结果类型。 (如果您不熟悉分组,请参阅this example of creating an A-Z type listing)。
话虽如此,应避免在循环内查询。大多数情况下,您可以通过简单的JOIN
获得相同的结果。在不了解第一个查询的情况下,我认为没有理由不能在这里做到这一点。
在psuedo-sql中沿着这些方向行事。它使用OUTER JOIN
来检索第一个表中的所有记录,但只有Action_Log中具有匹配ID且状态为&#34;完成&#34;的值。或&#34;已保存&#34;。
SELECT t1.ID
, t1.Name
, al.Action_Time AS CompletionDate
FROM SomeTable t1
LEFT JOIN Action_Log al
ON al.Form_ID = t1.ID
AND t1.Status = 'Complete'
AND al.Action IN ('Complete','Saved')