Как сделать добавленную строку из QueryAddRow () первой строкой результата запроса? - PullRequest
8 голосов
/ 31 мая 2010

Я вывожу запрос, но мне нужно указать первую строку результата. Я добавляю строку с помощью QueryAddRow () и устанавливаю значения с помощью QuerySetCell (). Я могу создать строку штрафа, я могу добавить содержимое в эту строку штрафа. Если я оставлю аргумент для номера строки за пределами QuerySetCell (), то все будет отлично работать как последний результат запроса при выводе. Однако мне нужно, чтобы это была первая строка запроса, но когда я пытаюсь установить атрибут строки с помощью QuerySetCell, он просто перезаписывает первую возвращенную строку из моего запроса (т.е. мой QueryAddRow () заменяет первую запись из моего запроса). В настоящее время у меня есть установка переменной из recordCount и организация вывода, но должен быть действительно простой способ сделать это, которого я просто не получаю. Этот код устанавливает значение строки в 1, но перезаписывает первую возвращенную строку из запроса.

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

Спасибо за любую помощь.

Ответы [ 3 ]

6 голосов
/ 31 мая 2010

Я бы добавил столбец порядка сортировки к исходному запросу, заполнив его фиксированным значением 1.

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

Установите значение этого столбца в синтетической строке равным 0.

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

Затем используйте запрос запросов, чтобы изменить порядок записей в столбце sortorder.

<cfquery name="qxLookup" dbtype="query">
select xid, xname, execution
from qxLookup
order by sortorder
</cfquery>
1 голос
/ 03 июня 2010

Ну, я имел дело с этой проблемой раньше, для меня ответом было 2 отдельных запроса.

1-й - ваш обычный запрос, 2-й - запрос запросов, затем объедините их, причем qofq будет выше нормального запроса, и это должно дать вам результаты в нужном вам порядке.

Примерно так:

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

Затем, используя этот инструмент, вы можете размещать запросы в любом порядке, но не забывайте использовать порядок по тегам, чтобы изменить порядок ...

0 голосов
/ 01 июня 2010

Просто альтернатива вышеописанному, но вы можете убрать ColdFusion из картинки и сделать это исключительно в SQL, используя что-то вроде (например, в oracle)

выберите «myinsertedvalue» из двойного союз выберите myrealvalues ​​из изменяемого

Вы можете комбинировать со столбцом сортировки Kens, чтобы получить полный порядок. Предполагая, что вы получаете основной запрос из БД!

...