Как запретить Query of Queries возвращать результаты с учетом регистра из CFC в Coldfusion

У меня возникла проблема, когда я соединяю два набора записей из двух разных источников данных, используя QueryAppend.cfc Бена Наделя. Данные, которые я возвращаю, верны, но порядок данных не ожидается. Объединенный набор результатов сортируется таким образом, что все результаты начинаются со строчной буквы, добавляемой к нижней части набора записей:

Снимок экрана cfdump

Я ожидаю (и нуждаюсь) в следующем типе сортировки:

яблоко

Изобразительное искусство

бутылка

Мальчик

Кот

монета

дротик

Собака

Код следует:

<!---Calling Template--->

<cfquery name="getDataSet1" datasource="datasource1">
SELECT param1
FROM table1
</cfquery> 

<cfquery name="getDataset2" datasource="datasource2">
 SELECT param1
FROM table2
</cfquery> 

<cfscript>
// Create object
 TheUnionObject = createObject("component", "cfc/QueryAppend");
 // Call the function
myUnionResult = TheUnionObject.QueryAppend(getDataSet1, getDataSet2);
</cfscript> 

<!---Dump results--->
<cfdump var="#myUnionResult#">






 <!---QueryAppend.cfc--->
 <cfcomponent>
 <cffunction name="QueryAppend" access="public" returntype="query" 
 output="false"
 hint="This takes two queries and appends the second one to the first one. 
  Returns the resultant third query.">
 <cfargument name="QueryOne" type="query" required="true" />
 <cfargument name="QueryTwo" type="query" required="true" />
 <cfset var LOCAL = StructNew() />
 <cfquery name="LOCAL.NewQuery" dbtype="query">
       (
            SELECT
               *
            FROM
                ARGUMENTS.QueryOne
        )
    UNION 
        (
            SELECT
                *
            FROM
                ARGUMENTS.QueryTwo
        )  ORDER BY Param1 ASC
  </cfquery>
 <cfreturn LOCAL.NewQuery />
  </cffunction>
  </cfcomponent>

Я предполагаю, что это поведение сортировки по умолчанию является неким скрытым кодом ColdFusion. Может ли кто-нибудь сказать мне, как изменить это поведение ORDER BY по умолчанию?


person cflingo    schedule 13.12.2018    source источник
comment
Запросы сортируются правильно, поскольку они отсортированы по ASCII. Я думаю, что быстрое исправление будет состоять в том, чтобы добавить поле в ваш оператор выбора, которое прописными буквами (ucase) значение поля, которое вы хотите отсортировать, а затем упорядочить по этому полю, но все же вывести поле без регистра.   -  person snackboy    schedule 14.12.2018
comment
Это было так просто, что я смущен, что не подумал об этом. Спасибо за подсказку.   -  person cflingo    schedule 14.12.2018
comment
Спасибо! Я опубликую (вариант) своего комментария в качестве ответа. Ваше здоровье!   -  person snackboy    schedule 14.12.2018


Ответы (1)


Быстрым решением было бы добавить поле в оператор select, которое заглавными буквами (upper) значение поля, которое вы хотите отсортировать, а затем упорядочить по этому полю, но при этом вывести поле без регистра . Что-то вроде:

select   *, 
         upper(name) as upperName
from     query
order by upperName 
person snackboy    schedule 14.12.2018