Как удалить строку из запроса ColdFusion? - PullRequest
5 голосов
/ 22 апреля 2011

Данный запрос (псевдокод):

<cfquery name="myquery">SELECT * FROM stuff</cfquery>

Как мне избавиться от первой записи? В этом случае изменение SQL не вариант. Я пробовал: myquery.RemoveRows(0,1);, но получил ошибку:

No matching Method/Function for Query.REMOVEROWS(numeric, numeric) found

Я на Railo 3 Кстати

Ответы [ 6 ]

11 голосов
/ 22 апреля 2011

О чудо:

myquery.RemoveRow(1);

Делает именно то, что я хотел. Оставьте это Рейло, чтобы сделать вещи немного по-другому!

4 голосов
/ 22 апреля 2011

Не могу придумать, как убрать строку из исходного объекта. Я могу думать о двух вещах:

  1. сделать запрос запросов. Это предполагает, что вы сможете идентифицировать записи, которые вам не нужны, и указать их в ГДЕ.

  2. создать новый запрос с помощью queryNew (). Перейдите к исходному запросу, выполнив querySetCell () в новом запросе для записей, которые вы хотите. Эта функциональность может быть легко встроена в UDF. Фактически, это заставило меня задуматься о проверке cflib.org. Смотрите # 3

  3. Проверьте cflib.org :) См. http://www.cflib.org/udf/QueryDeleteRows

2 голосов
/ 19 марта 2012

Railo добавил removeRows, см. здесь .Мой код ACF, использующий этот метод, теперь работает и на Railo, без изменений.

Теперь реализация Railo соответствует ACF.(Обратите также внимание, что исходная реализация Railo была основана на 0, в то время как новая версия и версия ACF основаны на 1.)

2 голосов
/ 25 августа 2011

«RemoveRows» на самом деле является вызовом базового метода Java, поэтому вам нужно привести эти числа. вот так:

myquery.RemoveRows(
    JavaCast( "int", 0 ) // starting row, zero-based
    ,JavaCast( "int", 1 ) // number to delete, returns error if too many
)

Так что, вероятно, метод "int, int", и если вы его не приведете, он будет выглядеть как "numeric, numeric". Кто-то может возразить, что это недокументировано, но это настолько сжато, что вы (как и я) можете обернуть его в функцию, так что если он изменится, вам просто нужно заменить содержимое функции альтернативным обходным решением.

0 голосов
/ 27 апреля 2011

Вы можете просто пропустить строку при обработке результатов:

<cfoutput query="myquery">
  <cfif myquery.currentrow GT 1>
    <!---Do the work here. --->
  </cfif>
</cfoutput>
0 голосов
/ 22 апреля 2011

Обычно я делаю это с помощью запросов, таких как:

SELECT * FROM myquery
LIMIT {1,10000}

Это должно работать в Railo.Он смещает запрос на единицу и получает 10000 записей.

Вы также можете сделать это:

SELECT * FROM myquery
WHERE {primarykey} <> {value}

Где он выбирает все записи, кроме значения первичного ключа, которое вы передаете.

Удивительной особенностью ColdFusion является то, что существует множество способов сделать именно то, что вы ищете.

...