Получить количество столбцов в запросе или структуре в ColdFusion - PullRequest
4 голосов
/ 17 марта 2011

Есть ли какой-либо целесообразный (желательно без цикла) способ получения количества столбцов в результате запроса?Я имею дело с модулем, который использует набор данных, не зная его деталей.

Ответы [ 4 ]

16 голосов
/ 17 марта 2011
<cfoutput>
   #ListLen(YourQuery.ColumnList)#
</cfoutput>
2 голосов
/ 17 марта 2011
<cfquery name="myQuery" datasource="#dsn#">
SELECT * FROM myTable
</cfquery>

<cfoutput>#myQuery.columnList#</cfoutput>
0 голосов
/ 19 декабря 2012

В CF10 или Railo 4 вы можете использовать функцию размера Underscore.cfc с массивом, запросом, объектом или структурой.Примеры:

_ = new Underscore();// instantiate the library

_.size([1, 2, 3]);// returns number of elements (3)
_.size(query);// returns number of rows
_.size(object);// returns number of keys
_.size({a: 1, b: 2});// returns number of keys (2)

Хотя просто делегирует нативному arrayLen() для массивов, structCount() для структур / объектов и recordCount для запросов, это хороший сокращенный метод,Это также полезно, когда вы хотите получить размер коллекции независимо от ее типа.

Примечание: я написал Underscore.cfc

0 голосов
/ 18 марта 2011

Для запроса:

<cfquery name="qMyQuery" datasource="MyDatasource">
  SELECT *
  FROM myTable
</cfquery>

<cfscript>
  cols = qMyQuery.columnList;
  colCount = ListLen(cols);
</cfscript>

Для структуры:

<cfset stStruct = {
  key1="Value1",
  key2="Value2",
  key3="Value3"
} />
<cfscript>
  cols = structKeyList(stStruct);
  colCount = structCount(stStruct);
</cfscript>

На основе любого из них вы можете сделать что-то вроде этого:

<table>
  <thead>
    <tr>
      <cfloop list="#cols#" delimiters="," index="c"><th>#c#</th></cfloop>
    </tr>
  </thead>
  <tbody>
<!-- for structure -->
    <tr>
      <cfloop list="#cols#" delimiters="," index="c"><td>#stStruct[c]#</td></cfloop>
    </tr>
<!-- for query -->
    <cfoutput query="qMyQuery">
    <tr>
      <cfloop list="#cols#" delimiters="," index="c"><td>#qMyQuery[c][qMyQuery.currentRow]#</td></cfloop>
    </tr>
    </cfoutput>
  </tbody>
</table>
...