当我试图在上一次查询的输出中运行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>当"StartStamp“输出到页面时,它会为循环中的每个计数显示一次,并对每个ID执行此操作,因此有很多额外的内容。
我认为它应该只在包含查询(reportInfo)输出循环时运行submitInfo查询一次,但这没有发生。
发布于 2015-05-12 22:09:34
(从评论中扩展)
<cfoutput>startStamp</cfoutput>
不确定您想要完成什么,但是您应该摆脱内部的cfoutput tags。这些只有在使用(经常被误解的) feature时才需要。它通常用于消除排序数据中的重复项。但是,如果数据没有正确地排序--或者分组不正确--就会产生您所描述的结果。(如果您不熟悉分组,请参见this example of creating an A-Z type listing)。
尽管如此,应该避免在循环中查询。大多数情况下,您可以使用简单的JOIN实现相同的结果。在不了解第一个查询的情况下,我看不出您有什么理由不能在这里这样做。
在psuedo-sql中,有类似的内容。它使用OUTER JOIN从第一个表检索所有记录,但只检索来自Action_Log的值,这些值具有匹配的ID和状态为“完全”或“保存”的状态。
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')https://stackoverflow.com/questions/30199074
复制相似问题