#coldfusion #cfquery
#coldfusion #cfquery
Вопрос:
Как распечатать весь результат без использования Results.columnname в ColdFusion
например:-
У меня есть <cfquery name="getProductId">
select productId
from product
</cfquery>
В таблице Product у меня есть 2 столбца с product_name и Product_id.
Как я могу распечатать их без использования getProductId.product_name getProductId.Product_id
Спасибо,
Ответ №1:
Чего вы пытаетесь достичь? Если вы ищете способ вычислительного вывода результатов запроса на основе запроса, названия столбцов которого вы не знаете, например…
<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>
Прошу прощения, если это не то, что вы имели в виду!
Комментарии:
1. Опять же, в этой
row
переменной нет необходимости! Переместите раздел thead за пределы цикла и вместо этого выполните запрос cfloop!2. @Chris в этом, как мы можем извлечь информацию из одного столбца?? Я имею в виду, что он выдает мне вывод в виде строки, которая содержит каждый столбец одной строки, как я могу извлечь все столбцы строки??
Ответ №2:
Не могли бы вы, пожалуйста, пояснить, что означает «без использования имени столбца»?
Возможно, вы хотите использовать 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>
РЕДАКТИРОВАТЬ: улучшенный пример избавления от переменной строки, как правильно замечено в комментариях.
Комментарии:
1.
row
Переменная не нужна. При выполнении цикла запроса у вас уже естьQueryName.CurrentRow
переменная2. @Питер, ты прав. Вот почему я сказал, что это фрагмент «старого кода» 🙂
Ответ №3:
Ответ №4:
Чтобы расширить мой комментарий к ответу Криса, вот более простая версия с отсутствующими тегами 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>