views:

67

answers:

1

I have 2 tables. One is for categories, the second is for Questions.

 category table: 

 category_id
 category_name

 questions table:

 question_name
 question_id
 category_id

How can I loop though all the category names and show the questions grouped under each category name? Using Coldfusion, so I am assume I should use CFLOOP

The results should look something like this.

  **Category1** 
  Question 1
  Question 2

  **Category2** 
  Question 4
  Question 5
+8  A: 

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. :(

Important: If this is HTML output, use HtmlEditFormat(question_name) to avoid potential HTML injection. Similarly, JsStringFormat(question_name) to avoid JS injection, etc.

Peter Boughton
How would I structure the loop like your example?
jeff
@jeff, what do u mean? cfoutput already loop over the query for you.
Henry
btw, don't forget to use htmlEditFormat() in between the ##. :)
Henry
Sorry, have it now. Was confused by the nested cfoutput tags. Thank you very much Peter. Thank Henry as well.
jeff
Yeah, your confusion is exactly why it'd be better using cfloop tags. (If the Advisory Committee was getting anywhere I'd try asking for it to be added to core.) Henry - good point, must escape output - although no guarantee this is HTML. ;)
Peter Boughton