2010-05-31 77 views
8

我正在输出查询,但需要指定结果的第一行。我使用QueryAddRow()添加行并使用QuerySetCell()设置值。 我可以创建行很好,我可以将内容添加到该行罚款。如果我将行号的参数从QuerySetCell()中解脱出来,那么它在输出时作为查询的最后结果都会很好。但是,我需要它作为查询的第一行,但当我尝试使用QuerySetCell设置行属性时,它只是覆盖查询中返回的第一行(即我的QueryAddRow()替换查询中的第一条记录)。我现在有的是从recordCount中设置一个变量并安排输出,但必须有一个非常简单的方法来实现这一点,我只是没有得到。 此代码将行值设置为1,但会覆盖查询中返回的第一行。如何从QueryAddRow()查询结果的第一行添加一行?

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

感谢您的任何帮助。

回答

6

我会为您的原始查询添加某种排序顺序列,并使用固定值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> 
+0

谢谢。这比我现在所拥有的更好。我真的很希望我缺少一些简单的东西(比如QueryAddRow的一个属性 - 因为默认是添加最后一行,也许有一个属性使它成为第一行?)。 – 2010-05-31 14:12:26

+0

@JS - +1 Ken的建议。 AFAIK,你不会错过任何东西,QueryAddRow只允许在查询结尾附加行。 – Leigh 2010-05-31 19:58:42

+0

这工作,谢谢。我留下了#行的属性,只是将它们添加为默认的最后一行,然后将QOQ排序。 – 2010-06-01 01:25:18

0

只是一个替代品上面,但你可以采取的ColdFusion出来的图片,并在SQL中使用类似(在如Oracle)

选择“myinsertedvalue”从双 工会 做到这一点只从可变的列表中选择myrealvalues

您可以结合Kens排序列获得完整排序。假设你正在从一个DB获得主查询!

+0

谢谢你。我在几个不同的地方使用相同的查询,并不总是需要这样做,所以我认为,因为我已经在内存中使用了CF路由,所以简单并且少用1个数据库。 – 2010-06-01 01:27:07

1

那么我已经处理过这个问题,对于我来说,答案是有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> 

然后使用这个工具,你可以把查询在你喜欢的任何顺序,但要记住的标签使用的顺序,变更单...

相关问题