Publicado en Internet

ColdFusion: Listar columnas devueltas por CFQUERY en orden correcto

Normalmente sabemos qué columnas nos traemos de una query, y por eso las pintamos en el orden que nos interesa. Pero si quisiéramos mostrar los datos de una query sin necesidad de saber las columnas que traemos o, simplemente, son tantas que es muy laborioso escribir una línea para cada una, necesitas obtener el listado de columnas que nos devuelve la consulta.

ColdFusion nos ofrece ColumnList, pero si lo has probado sabrás que devuelve el listado de columnas pero en orden alfabético, no en el orden de la tabla o el especificado en la query.

<cfquery name="qry_alumnos" datasource="facultad">
  SELECT id_alumno, nombre, apellidos FROM Alumnos
</cfquery>
<cfoutput>#qry_alumnos.ColumnList#</cfoutput>

Nos devolvería:

apellidos,id_alumno,nombre

Sin embargo, hay una manera de conseguir mostrar los campos ordenados, y es utilizar la función getColumnList().

<cfset columnas = ArraytoList(qry_alumnos.getColumnList())>
<cfoutput>#columnas#</cfoutput>

Esto nos devolvería:

id_alumno,nombre,apellidos

Y así es como tendríamos un array de campos perfectamente ordenado tal y como debe ser, y no en orden alfabético.

Para completar os dejo el código para mostrar los resultados en una tabla HTML:

<table>
   <tr>
      <cfloop index="i" list="#columnas#">
         <td><cfoutput>#i#</cfoutput></td>
      </cfloop>
   </tr>
   <cfoutput query="qry_alumnos">
      <tr>
         <cfloop index="i" list="#columnas#">
            <td>#evaluate(i)#</td>
         </cfloop>
      </tr>
   </cfoutput>
</table>

En el primer bucle cfloop pinto los nombres de los campos y en el segundo los datos de cada registro.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *