Coldfusion中的递归函数

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 />在查询中使用.