Создание списка выбора внутри цикла
-
02-10-2019 - |
Вопрос
Как вы не используете запрос запросов внутри цикла, чтобы решить проблему для создания списка выбора для каждой строки?
В этом примере у каждого клиента есть список действий, уникальных для этого клиента:
<cfquery name="qryAction" datasource="myDataSource">
SELECT ActionID,CustID,ActionName FROM AvailableActions
</cfquery>
<cfquery name="qryOrderHeader" datasource="myDataSource">
SELECT CustID FROM OrderHeader
</cfquery>
<html>
<body>
<cfform preservedata="yes">
<cfloop query="qryOrderHeader">
<cfquery name="qry3" dbtype="query">
SELECT ActionID,ActionName FROM qryAction
WHERE CustID = #qryOrderHeader.CustID#
</cfquery>
<cfselect name="ActionID" query="qry3" display="ActionName" value="ActionID" />
</cfloop>
</cfform>
</body>
</html>
Вот SQL, если это поможет иллюстрировать мой пример.
use tempdb
GO
create table Cust(
CustID Int Identity Primary Key,
CustName Varchar(255)
)
GO
INSERT INTO Cust(CustName) values('One')
INSERT INTO Cust(CustName) values('Two')
GO
create table AvailableActions(
ActionID Int Identity Primary Key,
CustID Int,
ActionName Varchar(255)
)
GO
INSERT INTO AvailableActions(CustID,ActionName) VALUES(1,'Insert')
INSERT INTO AvailableActions(CustID,ActionName) VALUES(1,'Edit')
INSERT INTO AvailableActions(CustID,ActionName) VALUES(1,'Delete')
INSERT INTO AvailableActions(CustID,ActionName) VALUES(2,'Insert')
INSERT INTO AvailableActions(CustID,ActionName) VALUES(2,'Edit')
GO
CREATE TABLE OrderHeader(
OrderHeaderID Int Identity Primary Key,
CustID Int
)
INSERT INTO OrderHeader(CustID) VALUES(1)
INSERT INTO OrderHeader(CustID) VALUES(2)
INSERT INTO OrderHeader(CustID) VALUES(2)
Я полагаю, что лучший результат будет включать в себя ActionID и ActionName в QryOnderHeader.
Решение
Это довольно просто для создания списков выбора вручную (вместо использования CFSELECT) с помощью CFOUTPUT с атрибутом группы:
<cfquery name="qryAction" datasource="myDataSource">
SELECT ActionID,CustID,ActionName
FROM AvailableActions
ORDER BY CustID
</cfquery>
<cfoutput query="qryAction" group="CustID">
<select name="actionid">
<cfoutput>
<option value="#val(ActionID)#">#htmlEditFormat(ActionName)#</option>
</cfoutput>
</select>
</cfoutput>
Примечание. Вам необходимо указать CustID в качестве первого (или только) заказа, чтобы правильно работать вложенные CFOUTPUTS. Не тестировал, так что могут быть опечатки.
Не связан с StackOverflow