Я не уверен на 100%, что понимаю проблему, которую вы пытаетесь решить.Это усугубляется очень нетрадиционным способом настройки базы данных.
Для начала, если вам не повезет, вы можете столкнуться с документированной ошибкой, когда использование тега cfqueryparam
приводит к ошибке Value cannot be converted to requested type
хотя я не знаю, происходит ли это с текущими версиями ColdFusion (8 +).
В любом случае, вы всегда можете выбрать все столбцов таблицы вручную, даже есливы не знаете, сколько из них в конечном итоге будет использовано:
SELECT partNumber, secondColumn, thirdColumn, ... , nthColumn
FROM Turbos
Обычно это предпочтительнее, чем просто использовать SELECT *
, хотя это создает некоторые проблемы, если вы привыкли часто добавлять / удалять столбцык таблицам.
Если вам не нужно использовать Struct по уважительной причине, вы должны использовать вместо него массив.Структуры не хранят информацию о заказе, в то время как массивы делают.Вот один из способов сортировки записей в qParts:
<cfset RecordsArray=ArrayNew(2)>
<cfset ColumnIndex=StructNew()>
<cfloop list="#qPartsOrder.ColumnList#" index="order_column">
<cfset ColumnIndex[order_column]=val(qPartsOrder[order_column][1])>
</cfloop>
<cfloop query="qParts">
<cfloop list="#qPartsOrder.ColumnList#" index="order_column">
<cfif val(ColumnIndex[order_column])>
<cfset RecordsArray[ColumnIndex[order_column]][qParts.CurrentRow]=qParts[order_column][qParts.CurrentRow]>
</cfif>
</cfloop>
</cfloop>
Результатом этого кода будет двумерный массив, причем первое число относится к индексу столбца, а второе - к строке записи..
В общем, я думаю, что если у вас нет нулевого контроля над структурой базы данных, есть лучший способ реализовать это, начиная с того, как вы настроили свою базу данных.Это действительно помогло бы увидеть некоторые поддельные образцы данных, а также иметь более четкое представление о том, чего вы пытаетесь достичь - что вы будете делать с этими упорядоченными полями, как только они у вас появятся, например?