2014-02-05 3 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,4 в позицию 4,5. Вам нужно будет захватить первые 2 строки, добавить 1 новую строку, а затем добавить обратно в последние 2 строки.Бит из Faff – duncan

+0

' \t выберите * из класса \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() для создания нового запроса.

Немного похоже на копирование текстовых файлов по строкам и вставку новой строки посередине!

Опять же, не совсем уверен, что вам нужно будет это сделать - вы можете просто добавить столбец сортировки, увеличивая в 10 секунд для каждой строки. После этого новая строка будет иметь порядок сортировки между строкой до и после строки. например, порядок сортировки был бы 15, чтобы вставить между 10 и 20.

Надеюсь, это поможет!

1

Я предполагаю, что позиции позиций в вашем наборе записей основаны на том, что вы заказали BY'd в своем начальном CFQUERY.

Поэтому я бы добавил строку в набор записей, а затем выполнил запрос этого набора записей (запрос запроса), используя тот же ORDER BY, что и исходный запрос, который затем должен вернуть все строки, включая ваш новый, в (предполагаемого) правильного порядка, в новом наборе записей.

1

Не зная цели, которую вы пытаетесь выполнить, мой первый совет будет соответствовать другим ответам. Добавьте строки, которые впоследствии можно отсортировать, используя 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#"> 
Смежные вопросы