2010-06-03 3 views
4

У меня есть 2 таблицы. Один для категорий, второй - для Вопросов.Использование вложенных запросов cfloop

category table: 

category_id 
category_name 

questions table: 

question_name 
question_id 
category_id 

Как я могу прокрутить все имена категорий и показать вопросы, сгруппированные под названиями каждой категории? Используя ColdFusion, я предполагаю, что я должен использовать <CFLOOP>

Результаты должны выглядеть примерно так.

Категория1

  • Вопрос 1
  • Вопрос 2

Категория2

  • Вопрос 4
  • Вопрос 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. :(

Update: В 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 (т. encodeForHtml, encodeForJavaScript и т. Д.)

+0

Как бы я построил цикл как ваш пример? – jeff

+0

@jeff, что означает u? cfoutput уже выполняет цикл запроса. – Henry

+1

btw, не забудьте использовать htmlEditFormat() между ##. :) – Henry