Использование вложенных запросов cfloop - PullRequest
5 голосов
/ 04 июня 2010

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

 category table: 

 category_id
 category_name

 questions table:

 question_name
 question_id
 category_id

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

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

Категория1

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

Категория2

  • Вопрос 4
  • Вопрос 5

1 Ответ

11 голосов
/ 04 июня 2010

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

...