2010-06-03 82 views
4

我有2个表。一个用于类别,另一个用于问题。使用嵌套cfloop查询

category table: 

category_id 
category_name 

questions table: 

question_name 
question_id 
category_id 

如何循环所有类别名称并显示分类在每个类别名称下的问题?使用ColdFusion,所以我想我应该用<CFLOOP>

结果应该是这个样子。

组别

  • 问题1
  • 问题2

类别2

  • 问题4
  • Question 5

回答

10

如果您使用cfoutput循环,则可以按特定列进行分组,然后为该列中的项目设置一个内部循环。

像这样:

<cfquery name="Questions"> 
    SELECT q.question_name , c.category_name 

    FROM questions q 
    JOIN category c 
     ON c.category_id = q.category_id 

    ORDER BY c.category_name , q.question_name 
</cfquery> 

<cfoutput query="Questions" groupby="category_name"> 
    **#category_name#** 
    <cfoutput> 
     #question_name# 
    </cfoutput> 
</cfoutput> 


烦人,这个分组功能还没有被添加到主cfloop,你需要通过cfoutput使用它。 :(

更新:在ColdFusion的10和Railo 4,你现在就可以做到这一点与cfloop而不是cfoutput但是请注意,属性是没有GROUPBY

<cfloop query="Questions" group="category_name"> 
    **#category_name#** 
    <cfloop> 
     #question_name# 
    </cfloop> 
</cfloop> 


重要:如果这是HTML输出,使用HtmlEditFormat(question_name)以避免潜在的HTML注入同样,JsStringFormat(question_name)避免JS注射等

再次,CF10/R4既具有改善的这sitution也与更consitently命名encodeForX方法(即encodeForHtml,encodeForJavaScript等)

+0

我将如何构建像你的例子循环? – jeff 2010-06-04 02:08:03

+0

@jeff,你是什么意思? cfoutput已经在查询中循环。 – Henry 2010-06-04 02:17:35

+1

btw,不要忘记在##之间使用htmlEditFormat()。 :) – Henry 2010-06-04 02:18:09