San*_*eon 2 coldfusion recursion
我正在尝试在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>
Run Code Online (Sandbox Code Playgroud)
问题是,一旦函数在循环中丢失原始查询,它就会调用自身.我现在的事件是三级深,但我不想一遍又一遍地使用相同的编码来处理所有事件.
我想最终得到一个结构数组,其中包含给定日期的所有事件和子事件.
Cia*_*her 10
尝试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.
Run Code Online (Sandbox Code Playgroud)
否则一切都进入VARIABLES范围并覆盖我怀疑的其他人.
希望有所帮助!
PS:您还应考虑<cfqueryparam />在查询中使用.
| 归档时间: |
|
| 查看次数: |
2353 次 |
| 最近记录: |