如何展示孩子的孩子?

时间:2014-01-11 13:22:41

标签: mysql coldfusion coldfusion-9

我有一个名为content的表,我在其中添加顶级页面和子页面。顶级页面将包含parent__id as the id of page title home,子页面将具有各自的parent__id。当我添加页面时,它看起来像这样。

id parent__id title and so on.
1     0       Home
2     1       About
3     2       services
4     1       contact us

这里我想显示它像

Home
  >About
   >>services
  >contact

我试过这个

<cfquery name="d" datasource="mydata">
    SELECT p.id as parentid,
           p.title as parent,
           p.nav_depth,
           c.id as childid,
           c.title as child,
           c.parent__id as child_parentid 
    from content p
    left join content as c on c.parent__id = p.id
    where p.site__id = "8432381492061036983"
    group by p.id, c.id
    order by  p.id, c.id, c.nav_order
</cfquery>
<cfdump var="#d#">  

<cfoutput query="d" group="parentid">
    <cfif d.nav_depth EQ 0>
        #d.parent#<br />
        <cfif d.parentid EQ d.child_parentid>
        <cfoutput>> #d.child#<br /></cfoutput> 
        </cfif>
     </cfif>
     <cfif d.nav_depth GT 0>
            <cfif d.childid EQ d.child_parentid>
             <cfoutput> >> #d.child<br /></cfoutput>
          </cfif>
     </cfif>
</cfoutput>

我得到了这样的输出。当我查看转储时,它显示正确的结果。

Home
> About US
> Services

有什么可以帮助我在查询或cfoutput中做什么,以不同的方式标记孩子的孩子并在父母的正下方显示它? 这是我的完整表格结构,其中包含数据http://sqlfiddle.com/#!2/a29fc/1/0。感谢

1 个答案:

答案 0 :(得分:1)

我看不到孩子的来源,但你需要的是嵌套的组输出。这应该让你走上正轨。最值得关注的是,您的查询按照它们应在屏幕上显示的顺序排序。您当前的SQL Fiddle没有正确执行该部分。

<cfoutput query="d" group="parentid">
  #d.parent#<br />
  <cfoutput group="child"><!--- group based on child --->
    > #d.child#<br /><!--- output child header --->
    <cfoutput>
      >> #d.child<br /><!--- all matching children for current d.child --->
    </cfoutput>
  </cfoutput>
</cfoutput>

这将输出

Home
> About Us
>> Our Works
> Contact Us