If you loop with cfoutput
, you can group by a specific column, and then have an inner loop for items in that column.
Like this:
<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>
Annoyingly, this grouping feature hasn't been added to the main cfloop
, you need to use it via cfoutput
. :(
Update: In ColdFusion 10 and Railo 4, you can now do this with cfloop
rather than cfoutput
. Note however that the attribute is group not groupby:
<cfloop query="Questions" group="category_name">
**#category_name#**
<cfloop>
#question_name#
</cfloop>
</cfloop>
Important: If this is HTML output, use HtmlEditFormat(question_name)
to avoid potential HTML injection. Similarly, JsStringFormat(question_name)
to avoid JS injection, etc.
Again, both CF10/R4 have improved this sitution too, with more consitently named encodeForX
methods (i.e. encodeForHtml
, encodeForJavaScript
, etc)