2010-05-31 11 views
8

Estoy generando una consulta pero necesito especificar la primera fila del resultado. Estoy agregando la fila con QueryAddRow() y estableciendo los valores con QuerySetCell(). Puedo crear la fila fina, puedo agregar el contenido a esa fila bien. Si dejo el argumento para el número de fila fuera de QuerySetCell() entonces todo funciona muy bien como el último resultado de la consulta cuando sale. Sin embargo, necesito que sea la primera fila de la consulta, pero cuando intento establecer el atributo de fila con QuerySetCell, sobrescribe la primera fila devuelta de mi consulta (es decir, mi QueryAddRow() reemplaza el primer registro de mi consulta). Lo que tengo actualmente es establecer una variable desde recordCount y organizar la salida, pero tiene que haber una forma realmente sencilla de hacer esto que no estoy obteniendo. Este código establece el valor de la fila en 1, pero sobrescribe la primera fila devuelta de la consulta.¿Cómo se hace una fila adicional de QueryAddRow() en la primera fila del resultado de una consulta?

<cfquery name="qxLookup" datasource="#application.datasource#"> 
    SELECT xID, xName, execution 
    FROM table 
</cfquery> 

<cfset QueryAddRow(qxLookup)/> 
<cfset QuerySetCell(qxLookup, "xID","0",1)/> 
<cfset QuerySetCell(qxLookup, "xName","Delete",1)/> 
<cfset QuerySetCell(qxLookup, "execution", "Select this to delete",1)/> 

<cfoutput query="qxLookup"> 
    <tr> 
     <td> 
      <a href="##" onclick="javascript:ColdFusion.navigate('xSelect/x.cfm?xNameVar=#url.xNameVar#&xID=#qxLookup.xID#&xName=#URLEncodedFormat(qxLookup.xName)#', '#xNameVar#');ColdFusion.Window.hide('#url.window#')">#qxLookup.xName#</a> 
     </td> 
     <td>#qxLookup.execution#</td> 
    </tr> 
</cfoutput> 

Gracias por cualquier ayuda.

Respuesta

6

Agregaría algún tipo de columna de orden a su consulta original, llenándola con un valor fijo de 1.

<cfquery name="qxLookup" datasource="#application.datasource#"> 
SELECT xID, xName, execution, 1 as sortorder 
FROM table 
</cfquery> 

Establecer el valor de esa columna en la fila sintética a un valor de 0.

<cfset QueryAddRow(qxLookup)> 
... 
<cfset QuerySetCell(qxLookup, "sortorder", "0",1)> 

A continuación, utilice la consulta-de consultas para reordenar el conjunto de registros por la columna de sortorder.

<cfquery name="qxLookup" dbtype="query"> 
select xid, xname, execution 
from qxLookup 
order by sortorder 
</cfquery> 
+0

gracias. eso es mejor de lo que tengo ahora. Realmente estaba esperando que me faltara algo simple (como un atributo para QueryAddRow - dado que el valor predeterminado es agregar la última fila, ¿tal vez hay un atributo para que sea la primera fila?). –

+0

@JS - +1 a la sugerencia de Ken. AFAIK, no te falta nada y QueryAddRow solo permite agregar filas al final de la consulta. – Leigh

+0

esto funciona, gracias. Dejé el atributo de la fila # y simplemente los agregué como la última fila predeterminada y luego hice la QOQ para ordenar. –

0

Sólo una alternativa a la anterior, pero se puede tomar ColdFusion fuera de la foto y hacer esto únicamente en el SQL usando algo como (por ejemplo, en el oráculo)

'myinsertedvalue' selecto de la doble unión seleccione myrealvalues ​​de mutable

Puede combinar con la columna de ordenación de Kens para obtener el pedido completo. ¡Suponiendo que estás obteniendo la consulta principal de un DB!

+0

gracias por esto. Utilizo la misma consulta en algunos lugares diferentes y no siempre necesito hacer este tipo de cosas, así que pensé que, dado que ya lo tenía en la memoria, la ruta CF sería simple y una llamada menos a la base de datos. –

1

Bien he tratado este problema antes, para mí la respuesta fue tener 2 consultas separadas.

Primero, siendo su consulta normal, 2º es la consulta de consultas, luego haga una unión de ellas, con el qofq por encima de la consulta normal, y eso debería darle resultados en el orden que desee.

Algo como esto:

<cfquery name="table_a_results" datasource=""> 
select a, b, c 
from table_a 
</cfquery> 

cfset table_b = querynew("a, b, c") 
cfset temp = queryaddrow("table_b") 
cfset temp = querysetcell(table_b,10) 
cfset temp = querysetcell(table_b,20) 
cfset temp = querysetcell(table_b,30) 

<cfquery name="final_query" dbtype="query"> 
select a, b, c 
from table_b 
union 
select a, b, c 
from table_a_results 
</cfquery> 

Luego, utilizando esta herramienta puede poner consultas en el orden que desee, pero recuerde que debe utilizar la orden por etiqueta, para cambiar el orden ...

Cuestiones relacionadas