Как изменить порядок структурных столбцов? - PullRequest
0 голосов
/ 21 сентября 2010

Я пытаюсь отобразить свои результаты из CFQuery в определенном порядке.Порядок должен поддерживаться в базе данных, чтобы им можно было манипулировать, а количество столбцов в таблице неизвестно.Последняя строка в таблице - «ColumnOrder»: у каждого столбца есть номер, указывающий порядок сортировки, 0 означает «не отображать».Я пытаюсь отсортировать по циклу, скажем, "у" от 1 до maxCols:

0) сделать у = 1 до maxCols

1) в sortColumn набор результатов, используйте y для поиска соответствующего KEY

2) в наборе результатов products , найдите значение из соответствующего KEY

3) вставить указанное значение в цикл tempStruct [y]

4).

Я бегу в стену, пытаясь использовать structFindKey ().Вот мой код:

<CFQUERY name="qParts" datasource="Pascal">         
    SELECT * FROM Turbos WHERE PartNumber LIKE <cfqueryparam cfsqltype="cf_sql_char" maxlength="30" value="%#mfr#%"> ORDER BY #sort# ASC 
</CFQUERY>
<cfquery name="qPartsOrder" datasource="Pascal">
    SELECT * FROM Turbos WHERE PartNumber = 'ColumnOrder'
</cfquery>

<cfset tempStruct=structnew()>
        <cfloop index="columnOrder2" from="1" to="#ListLen(qPartsOrder.ColumnList, ',')#">
            <cfdump var="#StructFindKey(qPartsOrder, columnOrder2)#">
            <cfset tempStruct[columnOrder2] = StructFindKey(#qPartsOrder#, "#columnOrder2#")>
            <cfset currentCol = "#ListGetAt(qParts.columnList, columnOrder2, ',')#">
            <cfoutput>#qParts[currentCol][qParts.currentrow]# <br/></cfoutput>
        </cfloop>
<cfdump var="#tempstruct#">

Линия

<cfdump var="#StructFindKey(qPartsOrder, columnOrder2)#">

выбрасывает ОГРАНИЧЕНИЕ !!сообщение об ошибке, поэтому я не могу отладить его, и я застрял.

Любая помощь будет полезна (и ДА, я должен использовать SELECT *, это универсальный продуктотобразить страницу для отображения ВСЕЙ информации в базе данных, за исключением нескольких, которые обозначены нулем в столбце заказа, помните?).

Ответы [ 2 ]

2 голосов
/ 21 сентября 2010

Я не уверен на 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>

Результатом этого кода будет двумерный массив, причем первое число относится к индексу столбца, а второе - к строке записи..

В общем, я думаю, что если у вас нет нулевого контроля над структурой базы данных, есть лучший способ реализовать это, начиная с того, как вы настроили свою базу данных.Это действительно помогло бы увидеть некоторые поддельные образцы данных, а также иметь более четкое представление о том, чего вы пытаетесь достичь - что вы будете делать с этими упорядоченными полями, как только они у вас появятся, например?

0 голосов
/ 21 сентября 2010

Дун вы пытаетесь использовать StructSort?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...