使用嵌套的cfloop查询

时间:2010-06-03 23:45:31

标签: sql sql-server coldfusion cfml cfloop

我有2张桌子。一个是类别,第二个是问题。

 category table: 

 category_id
 category_name

 questions table:

 question_name
 question_id
 category_id

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

结果看起来应该是这样的。

类别1

  • 问题1
  • 问题2

Category2

  • 问题4
  • 问题5

1 个答案:

答案 0 :(得分: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也改进了这种情况,使用了更加明确命名的encodeForX方法(即encodeForHtmlencodeForJavaScript等)