2010-05-31 11 views
8

Ich gebe eine Abfrage aus, muss aber die erste Zeile des Ergebnisses angeben. Ich füge die Zeile mit QueryAddRow() hinzu und setze die Werte mit QuerySetCell(). Ich kann die Zeile fein erstellen, ich kann den Inhalt zu dieser Zeile hinzufügen. Wenn ich das Argument für die Zeilennummer von QuerySetCell() belasse, dann funktioniert alles gut als das letzte Ergebnis der Abfrage bei der Ausgabe. Ich brauche es jedoch als erste Zeile der Abfrage, aber wenn ich versuche, das Zeilenattribut mit der QuerySetCell zu setzen, überschreibt es einfach die erste zurückgegebene Zeile aus meiner Abfrage (d. H. Meine QueryAddRow() ersetzt den ersten Datensatz aus meiner Abfrage). Was ich momentan habe, ist eine Variable von recordCount zu setzen und die Ausgabe zu arrangieren, aber es muss eine wirklich einfache Möglichkeit geben, dies zu tun, die ich gerade nicht bekomme. Dieser Code setzt den Zeilenwert auf 1, überschreibt jedoch die erste zurückgegebene Zeile aus der Abfrage.Wie fügen Sie eine Zeile aus QueryAddRow() der ersten Zeile des Ergebnisses aus einer Abfrage hinzu?

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

Danke für jede Hilfe.

Antwort

6

Ich würde Ihrer ursprünglichen Abfrage eine Art Sortierreihenfolgespalte hinzufügen und sie mit einem festen Wert von 1 füllen.

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

den Wert dieser Spalte in der synthetischen Zeile auf einen Wert von 0 einstellen.

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

Dann Abfrage-of-Abfragen verwenden, um den Datensatz durch die sortorder Spalt neu zu ordnen. mit so etwas wie (zB in Oracle)

select ‚myinsertedvalue‘ von Dual Vereinigung

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

Ihnen danken. Das ist besser als das, was ich gerade habe. Ich hatte wirklich gehofft, dass mir etwas Einfaches fehlte (wie ein Attribut für QueryAddRow - da der Standard darin besteht, die letzte Zeile hinzuzufügen, vielleicht gibt es ein Attribut, um es zur ersten Zeile zu machen?). –

+0

@JS - +1 zu Ken Vorschlag. AFAIK, Sie verpassen nichts und QueryAddRow erlaubt nur das Anhängen von Zeilen an das Ende der Abfrage. – Leigh

+0

das funktioniert, danke. Ich habe das row # -Attribut verlassen und habe es nur als die letzte Standardzeile hinzugefügt, dann habe ich das QOQ sortiert. –

0

nur eine Alternative zu oben, aber man konnte Coldfusion nimmt das Bild aus, und dies in den SQL allein tun Wählen Sie myrealvalues ​​von veränderbar

Sie konnten mit Sortierspalte Kens kombinieren, um volle Ordnung zu erhalten. Angenommen, Sie erhalten die Hauptabfrage von einer DB!

+0

danke dafür. Ich benutze die gleiche Abfrage ein paar verschiedene Orte und muss nicht immer diese Art zu tun, so dachte ich, dass, da ich bereits im Speicher hatte, dass die CF-Route wäre einfach und 1 weniger Aufruf an die DB. –

1

Nun, ich habe mich mit diesem Problem beschäftigt, für mich war die Antwort, 2 getrennte Abfragen zu haben.

Erstens, da es sich um eine normale Abfrage handelt, wobei die Abfrage die Abfrage ist, dann führe eine Vereinigung von ihnen aus, wobei die QoFQ über der normalen Abfrage liegt und Ergebnisse in der von dir gewünschten Reihenfolge erhalten sollen.

Etwas wie folgt aus:

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

Dann dieses Werkzeug verwenden Sie Abfragen in beliebiger Reihenfolge, die Sie mögen, aber nicht vergessen, die Reihenfolge von Tag zu verwenden, zu ändern, um ...

Verwandte Themen