2009-07-22 2 views
3

У меня есть объект запроса, с, скажем, пятнадцать строк. Во всех смыслах и целях я не могу изменить SQL, который генерирует объект запроса, но мне нужно отсортировать этот объект запроса по столбцу. Есть ли способ сделать это в ColdFusion 7, не прибегая к внешней библиотеке?Как отсортировать объект запроса в ColdFusion 7?

Редактировать: Я должен добавить: Я запустил запрос по этому объекту запроса и сделал предложение ORDER BY в этом запросе запроса. Есть ли другой способ сделать это?

+0

Относительно: "Есть ли другой способ сделать это?" - Можете ли вы сказать, почему QoQ недостаточно в этом случае? – Tomalak

+0

Tomalak: Из-за каких-то смягчающих обстоятельств, произойдет на странице просмотра, что причиняет боль моей душевой стороне больше, чем вызов функции. –

+2

Да, я ненавижу делать это сам. Не могли бы вы создать UDF, чтобы обернуть QofQ? Затем вы просто вызываете функцию в своем представлении. Думаю, что меньше греха. – ale

ответ

12

Нет, запрос запроса - это то, как вы это сделаете. Есть другие способы, которыми вы могли бы обезопасить данные, но они все kludgey и не будут такими же прямыми, как QoQ.

Одна из возможностей QoQ (так называемые запросы в памяти) заключается в том, что она может использоваться для запроса, возвращаемого любым тегом, который возвращает объект запроса, например CFDIRECTORY и CFPOP.

Для людей интересно, как сделать запрос запроса, это просто:

<cfquery name="resortQuery" dbtype="query"> 
    SELECT * 
    FROM myQueryFromSomewhereElse 
    WHERE 
     COLUMN_NAME=<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#myFilterValue#" /> 
    ORDER BY 
     SOME_OTHER_COLUMN_NAME ASC 
</cfquery> 
12

Даже если этот вопрос уже решен, я хочу добавить, что вы также можете использовать лежащую в основе Java метод Sort(), который просто нуждается в одной строке, и вам не нужно добавлять UDF для этого. Код будет выглядеть следующим образом:

<cfset qQuery.sort(qQuery.findColumn("nameOfSortColumn"), TRUE)> 

вызов findColumn() необходимо, чтобы получить индекс столбца сортировки, потому сортировки() работает с индексами столбцов, а не с именами столбцов. Второй параметр указывает порядок сортировки: TRUE = восходящий, FALSE = нисходящий.

Преимущества: одна линия вызова, быстрее предыдущего квартала

Недостатки: вроде ограничения на один столбец

Есть гораздо более скрытые особенности базового класса Java. Смотрите следующие ссылки для получения дополнительной информации:

В Lucee (проверено с 4.5 и 5.2), это также работает аналогично, и даже проще:

<cfset qQuery.sort("nameOfSortColumn", "asc")> 

Надеюсь, это дает некоторые идеи ...

+0

Есть ли информация о возможностях до версии CF9-10 и так далее? Имеет ли это какие-либо недостатки производительности или преимущества? – RRK

+1

Насколько я знаю, это также должно работать с CF 10. Это должно быть быстрее запроса запроса, поскольку запрос должен быть сначала интерпретирован. К сожалению, я не могу проверить оба на данный момент, чтобы дать более точную информацию об этом. –

+0

@SebastianZartner благодарит за отзыв, но, к сожалению, я не могу заставить его работать. 'qryAddresses.sort (1, TRUE)' возвращает эту ошибку: "ключ [1] не найден в запросе, столбцы: [addressID, memberID, createDate, lastUpdated, addressName, ...]. Любые предложения? – 10basetom

Смежные вопросы