我正在尝试在 Coldfusion 中创建递归函数,但遇到了一些问题。
这是我的逻辑:
<cffunction name="getEvents" access="private">
<cfargument name="strtdate">
<cfargument name="parentID" default=0>
<cfqeury name="qry" datasource="db">
select *
from table
where parentid = #parentid# and
starttime between #strtdate# and #DateAdd('d', 1, strtdate)#
</cfquery>
<cfset events = arraynew(1)>
<cfloop query="qry">
<cfset events[qry.currentrow] = structnew()>
<cfset events[qry.currentrow].id = qry.id>
<cfset subevents = getEvents(strtdate, qry.id)>
<cfif arraylen(subevents)>
<cfset events[qry.currentrow].subevents = subevents>
</cfif>
</cfloop>
<cfreturn events>
</cffunction>
问题是,一旦函数调用自身,它就会在循环中丢失原始查询。我现在的事件是三层深度,但我不想一遍又一遍地使用相同的编码来处理所有事件。
我希望最终得到一个结构数组,其中包含给定日期的所有事件和子事件。
Try var
确定查询对象的范围。事实上,一般来说您应该使用正确的范围。例如:
<cffunction name="getEvents" access="private">
<cfargument name="strtdate">
<cfargument name="parentID" default=0>
<cfset var qry = "" />
<cfset var events = "" />
<!--- etc. --->
<cfquery name="qry" datasource="db">
select *
from table
where parentid = #parentid# and
starttime between #ARGUMENTS.strtdate#
and #DateAdd('d', 1, ARGUMENTS.strtdate)#
</cfquery>
... etc.
否则一切都会进入VARIABLES
范围并覆盖我怀疑的其他内容。
希望有帮助!
PS:您还应该考虑使用<cfqueryparam />
在您的查询中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)