2010-05-31 10 views
8

Sto emettendo una query ma è necessario specificare la prima riga del risultato. Sto aggiungendo la riga con QueryAddRow() e impostando i valori con QuerySetCell(). Posso creare la riga fine, posso aggiungere il contenuto a quella fila bene. Se lascio l'argomento per il numero di riga fuori da QuerySetCell(), allora tutto funziona alla grande come l'ultimo risultato della query quando l'output. Tuttavia, ho bisogno che sia la prima riga della query, ma quando provo a impostare l'attributo row con QuerySetCell, semplicemente sovrascrive la prima riga restituita dalla mia query (ad esempio, il mio QueryAddRow() sostituisce il primo record della mia query). Quello che attualmente ho è l'impostazione di una variabile da recordCount e organizzare l'output, ma ci deve essere un modo molto semplice per fare questo che non sto ottenendo. Questo codice imposta il valore di riga su 1 ma sovrascrive la prima riga restituita dalla query.Come si crea una riga aggiunta da QueryAddRow() alla prima riga del risultato di una query?

<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> 

Grazie per qualsiasi aiuto.

risposta

6

Vorrei aggiungere una sorta di colonna di ordinamento alla query originale, popolandola con un valore fisso di 1.

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

impostare il valore della colonna nella tua linea sintetica per un valore di 0.

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

Poi utilizzare Query-of-query per riordinare il set di record dalla colonna sortorder.

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

grazie. è meglio di quello che ho adesso. Speravo davvero che mi mancasse qualcosa di semplice (come un attributo per QueryAddRow - dal momento che l'impostazione predefinita è aggiungere l'ultima riga, forse c'è un attributo per renderlo la prima riga?). –

+0

@JS - +1 al suggerimento di Ken. AFAIK, non ti manca nulla e QueryAddRow consente solo di accodare le righe alla fine della query. – Leigh

+0

funziona, grazie. Ho lasciato fuori l'attributo # row e li ho aggiunti come ultima riga predefinita, poi ho fatto il QOQ per ordinare. –

0

solo un'alternativa in precedenza, ma si potrebbe prendere ColdFusion fuori dal quadro e fare questo unicamente nel SQL usando qualcosa come (per esempio in Oracle)

selezionare 'myinsertedvalue' dal duplice unione seleziona myrealvalues ​​da mutabile

È possibile combinare con la colonna di ordinamento Kens per ottenere l'ordine completo. Supponendo che stai ottenendo la query principale da un DB!

+0

grazie per questo. Io uso la stessa query in posti diversi e non sempre ho bisogno di fare questo tipo, quindi ho pensato che dal momento che ho già avuto in memoria che andando la rotta CF sarebbe semplice e 1 chiamata in meno al DB. –

1

Bene, ho affrontato questo problema prima, per me la risposta era avere 2 query separate.

In primo luogo, essendo la tua query normale, la seconda è la query di query, quindi esegui una unione di esse, con qofq al di sopra della query normale e che dovrebbe fornire i risultati nell'ordine desiderato.

Qualcosa di simile a questo:

<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> 

Quindi, utilizzando questo strumento è possibile inserire le query in qualsiasi ordine che ti piace, ma ricordatevi di utilizzare l'ordine per tag, per cambiare l'ordine ...

Problemi correlati