Как распечатать весь результат без использования Results.columnname в ColdFusion

Как распечатать весь результат без использования Results.columnname в ColdFusion

например: -

у меня <cfquery name="getProductId"> select productId from product </cfquery>

В таблице продуктов у меня есть 2 столбца с product_name и Product_id.

Как я могу распечатать их без использования getProductId.product_name getProductId.Product_id

Спасибо,


person CFUser    schedule 29.10.2009    source источник


Ответы (4)


Чего вы пытаетесь достичь? Если вы ищете способ вывода результатов запроса с помощью вычислений на основе запроса, имена столбцов которого вам неизвестны, например...

<cfquery name="queryName" ...>
    select * from product
</cfquery>

...тогда вы можете использовать переменную queryName.ColumnList, которая возвращает разделенный запятыми список имен всех столбцов. Впоследствии вы можете перебрать этот список и вывести его по мере необходимости.

Например, чтобы получить простую таблицу HTML:

<table border=1>
    <cfloop from="0" to="#queryName.RecordCount#" index="row">
        <cfif row eq 0>
            <tr>
                <cfloop list="#queryName.ColumnList#" index="column" delimiters=",">
                    <th><cfoutput>#column#</cfoutput></th>  
                </cfloop>
            </tr>
        <cfelse>
            <tr>
                <cfloop list="#queryName.ColumnList#" index="column" delimiters=",">
                    <td><cfoutput>#queryName[column][row]#</cfoutput></td>
                </cfloop>
            </tr>
    </cfif>
    </cfloop>
</table>

Извините, если это не то, что вы имели в виду!

person Chris R    schedule 29.10.2009
comment
Опять же, в этой переменной row нет необходимости! Переместите раздел thead за пределы цикла и вместо этого выполните запрос cfloop! - person Peter Boughton; 29.10.2009
comment
@Chris, как мы можем извлечь информацию из одного столбца ?? Я имею в виду, что это дает мне вывод в виде строки, которая содержит каждый столбец одной строки, как я могу извлечь все столбцы строки?? - person Satish Sharma; 29.01.2013

Не могли бы вы уточнить, что означает «без использования имени столбца»?

Может быть, вы хотите использовать атрибут getProductId.ColumnList?

Небольшой пример из моего старого кода, который преобразует запрос в массив (немного урезаны детали и изменены имена переменных, но идея видна):

    <cfset arrRecordSet = ArrayNew(1)>

    <cfloop query="qGetSomething">
        <cfset record = StructNew()>
        <cfloop list="#qGetSomething.ColumnList#" index="field">
            <cfset record[field] = qGetSomething[field][qGetSomething.CurrentRow]>
        </cfloop>
        <cfset ArrayAppend(arrRecordSet,record)>
    </cfloop>

РЕДАКТИРОВАТЬ: расширенный пример, чтобы избавиться от переменной строки, как правильно замечено в комментариях.

person Sergey Galashyn    schedule 29.10.2009
comment
Переменная row не нужна. При выполнении цикла запроса у вас уже есть переменная QueryName.CurrentRow - person Peter Boughton; 29.10.2009
comment
@Питер, ты прав. Вот почему я сказал, что это кусок старого кода :) - person Sergey Galashyn; 29.10.2009

Запрос к таблице HTML? для этого есть тег!

<CFTable> ВСЁ!

http://www.cfquickdocs.com/cf8/#cftable :)

person Henry    schedule 29.10.2009

Чтобы расширить мой комментарий к ответу Криса, вот более простая версия с добавленными отсутствующими тегами thead/tbody:

<cfoutput>
    <table>
        <thead>
            <tr>
                <cfloop index="ColName" list="#MyQuery.ColumnList#">
                    <th>#ColName#</th>
                </cfloop>
            </tr>
        </thead>
        <tbody>
            <cfloop query="MyQuery">
                <tr>
                    <cfloop index="ColName" list="#MyQuery.ColumnList#">
                        <td>#MyQuery[ColName][MyQuery.CurrentRow]#</td>
                    </cfloop>
                </tr>
            </floop>
        </tbody>
    </table>
</cfoutput>
person Peter Boughton    schedule 29.10.2009