Используя вложенные запросы cfloop

У меня есть 2 таблицы. Каждый для категорий, второе для Вопросов.

 category table: 

 category_id
 category_name

 questions table:

 question_name
 question_id
 category_id

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

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

Category1

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

Category2

  • Вопрос 4
  • Вопрос 5
5
задан Leigh 6 May 2013 в 13:33
поделиться

1 ответ

Если вы выполняете цикл с 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 . Однако обратите внимание, что атрибутом является группа not 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 и т. Д.)

11
ответ дан 13 December 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: