2010-06-03 111 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