我们如何在cfquery结果的中间添加一个新行?

时间:2014-02-05 13:08:12

标签: coldfusion coldfusion-10 cfquery

我有来自cfquery的查询结果集。我只想在特定的行号后面添加一个新的。但每当它在最后插入行时都会尝试。

有什么办法可以在查询中间插入行吗?

 <cfquery datasource="cse" name="abc">
    select * from grade 
 </cfquery>

 <cfset i = 0>
 <cfloop query="abc">
   <cfset i = i+1>
   <cfif i eq 2>
      <cfset queryAddRow(abc)>
   </cfif>  
 </cfloop>

4 个答案:

答案 0 :(得分:3)

你不能,轻松。你有一个coupla选项。

<cfquery name="resultSet" dbtype="query">
    SELECT col1, col2, etc
    FROM yourQuery
    WHERE [somecondition matching the "top" rows]

    UNION

    SELECT 'value' AS col1, 'value' AS col2, etc

    UNION

    SELECT col1, col2, etc
    FROM yourQuery
    WHERE [somecondition matching the "bottom" rows]
</cfquery>

或者您可以使用queryNew()queryAddRow()querySetCell()循环遍历原始查询,构建新查询。在循环中的适当位置...添加要插入的行,然后继续添加其余行。

我无法想到优雅的方式。

答案 1 :(得分:2)

不知道你想要达到的目标,我的第一个建议是与其他答案一致。添加可以使用Order By排序的行。但是,如果您真的只想在现有查询中的特定位置注入一行,则应该为您执行此操作。请注意,您需要在QueryNew()中定义列,因此我提供了一个示例案例。

 <cfquery datasource="cse" name="abc">
    select student, teacher from grade 
 </cfquery>

 <cfset abc_new = QueryNew("student,teacher","varchar,varchar")>

 <cfloop query="abc">
   <!--- ADD NEW DATA TO QUERY AT ROW 2 --->
   <cfif CURRENTROW eq 2>
     <cfset QueryAddRow(abc_new) />
     <cfset QuerySetCell(abc_new,"STUDENT","Tommy Oliver") />
     <cfset QuerySetCell(abc_new,"TEACHER","Ms. Appleby") />
   </cfif>

   <!--- COPY ORIGINAL DATA TO QUERY, ROW NUMBERS NOT PRESERVED --->
   <cfset QueryAddRow(abc_new) />
   <cfset QuerySetCell(abc_new,"STUDENT",abc.STUDENT) />
   <cfset QuerySetCell(abc_new,"TEACHER",abc.TEACHER) />
 </cfloop>

 <cfdump var="#abc_new#">

答案 2 :(得分:1)

最好的方法是创建一个新查询,复制原始行中的每一行,但在所需的位置添加新行。

使用QueryNew()创建新查询。

有点像逐行复制文本文件并在中间插入新行!

同样,不太确定你是否需要这样做 - 你可以简单地添加一个sortorder列,每行增加10秒。然后,新行将在前一行和后一行之间有一个排序顺序。例如,sortorder将在15到10之间插入。

希望这有帮助!

答案 3 :(得分:1)

我假设您的记录集中的行位置基于您在初始CFQUERY中的ORDER BY。

因此,我将该行添加到记录集,然后使用与初始查询相同的ORDER BY执行该记录集的查询(查询查询),然后返回所有行,包括新的行,在(推测)正确的顺序,在新的记录集中。