2014-02-05 54 views
4

我有一個來自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> 
+2

你能告訴我們你試過的東西嗎?有一件事要嘗試可能是增加行到最後,然後做一個QoQ來更新排序順序。好奇的是,在查詢中添加行的用例是什麼? –

+1

本地沒有東西。假設您有一個包含4行的查詢,並且您想要插入新的第3行,請將行3,4移至位置4,5。您必須抓住前兩行,添加一行新行,然後在最後兩行上重新添加。一個faff – duncan

+0

' \t SELECT * FROM級\t 位 \t \t \t \t \t \t ' –

回答

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()。在循環中的適當位置添加要插入的行,然後繼續添加其餘的行。

有沒有優雅我能想到的方式。

+0

您可能需要使用值爲1,2和3的排序字段才能使該聯合查詢起作用,再加上一個order by子句。 –

+0

是的。這是概念證明,丹。 –

1

最好的辦法是創建一個新的查詢,從原始文件複製每一行,但在所需點添加新行。

使用QueryNew()創建新的查詢。

有點像複製文本文件逐行並在中間插入新行!

再一次,不太清楚你需要這樣做 - 你可以簡單地添加一個sortorder列,每行增加10s。新行將在前一行和後一行之間具有排序順序。例如sortorder將是15插入10和20.

希望這有助於!

1

我假設您的記錄集中的行位置取決於您在初始CFQUERY中的ORDER BY。

因此,我會將該行添加到記錄集中,然後使用與初始查詢相同的ORDER BY對該記錄集(查詢的查詢)執行查詢,然後應該返回所有行,包括您的新查詢(推測)正確的順序,在一個新的記錄集中。

1

不知道你想要完成的目標,我的第一條建議就是沿着其他答案的路線。添加隨後可以使用「排序方式」排序的行。但是,如果您真的只想在現有查詢中的特定位置注入行,則應該爲您執行此操作。注意你需要在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#"> 
相關問題